2010-11-06 2 views
1

Как найти число встречаемости каждого уникального символа в строке? Вы можете использовать не более одного цикла. пожалуйста, опубликуйте свое решение, спасибо.Количество экземпляров каждого уникального символа

+1

Звучит как вопрос HW –

+3

Домашнее задание? Покажи нам, что ты сделал. – birryree

+2

Как найти то, что вы уже сделали? Сначала вы можете попытаться решить проблему, а затем задать вопросы о проблемах, которые у вас есть. пожалуйста, напишите, что вы сделали, спасибо. –

ответ

13

Поскольку это звучит как проблема с домашней работой, давайте попробуем разобраться, как решить эту проблему вручную. Как только мы это сделаем, давайте посмотрим, как мы можем попытаться реализовать это в коде.

Что нужно сделать?

Давайте рассмотрим следующую строку:

it is nice and sunny today. 

Для того, чтобы получить счет, сколько раз появляется каждый символ в строке выше, мы должны:

  1. перебирать каждый символ строка
  2. Держите подсчет количества раз, когда каждый символ в строке отображается

Как мы на самом деле попробуем?

Делая это это вручную может быть, как это:

Во-первых, мы находим новый characeter i, таким образом, мы могли бы отметить, что в таблице и говорят, что i появился 1 раз до сих пор:

'i' -> 1 

во-вторых, мы находим еще один новый персонаж t, таким образом, мы могли бы добавить, что в приведенной выше таблице:

'i' -> 1 
't' -> 1 

В-третьих, пространство, и повторить еще раз ...

'i' -> 1 
't' -> 1 
' ' -> 1 

В-четвертых, мы сталкиваемся с i которая происходит существовать в таблице уже. Таким образом, мы хотим получить существующий счет, и заменить его на существующем счете + 1:

'i' -> 2 
't' -> 1 
' ' -> 1 

И так далее.

Как перевести на код?

Переводя выше в коде, мы можем написать что-то вроде этого:

  • Для каждого символа в строке
    • Проверьте, чтобы увидеть, если персонаж уже сталкивался
      • Если нет , затем запомните новый символ и скажите, что мы столкнулись с ним один раз
      • Если да, то возьмите количество раз, когда оно было встречено, и увеличьте его на

Для реализации как уже упоминалось, с помощью цикла и Map может добиться того, что требуется.

цикл (например, for или while петли) можно было бы использовать для перебора символов в строке.

Map (например, HashMap) может быть использован для отслеживания того, сколько раз появился персонаж. В этом случае ключ будет символом, а значение будет состоять в том, сколько раз появляется символ.

Удачи вам!

+0

+1 Подробнее. – zengr

+0

Спасибо! :) (ack, 15 символов фильтра ...) – coobird

+0

это очень информативно, вы действительно хороший наставник :-) – didxga

5

Это домашнее задание, поэтому не может разместить код, но вот один подход:

  1. Итерация через строку, символ на символ.
  2. Поместите символ в ключ hashmap и инициализируйте его значение 1 (количество). Теперь, если символ встречается снова, обновите значение (count + 1). Else добавьте новый символ на ключ и снова установите его значение (count = 1)
+1

Спасибо :-), это на самом деле вопрос интервью, который я ответил несколько дней назад, и ваш ответ похож на мой. Я задаю вопрос здесь, потому что я хочу знать, что думает другой программист. – didxga

+0

Я думаю, hashmap - лучший ответ на эту проблему. – zengr

0
Here you go! I have done a rough program on Count occurrences of each unique character 

public class CountUniqueChars{ 
    public static void main(String args[]){ 
     HashMap<Character, Integer> map;   
     ArrayList<HashMap<Character, Integer>> list = new ArrayList<HashMap<Character,Integer>>(); 
     int i; 
     int x = 0; 
     Boolean fire = false; 

     String str = "Hello world"; 
     str = str.replaceAll("\\s", "").toLowerCase(); 
     System.out.println(str.length()); 

     for(i=0; i<str.length() ; i++){ 
      if(list.size() <= 0){ 
       map = new HashMap<Character, Integer>(); 
       map.put(str.charAt(i), 1); 
       list.add(map); 
      }else{    
       map = new HashMap<Character, Integer>(); 
       map.put(str.charAt(i), 1); 

       fire = false; 

       for (HashMap<Character, Integer> t : list){ 
        if(t.containsKey(str.charAt(i)) == map.containsKey(str.charAt(i))){     
         x = list.indexOf(t); 
         fire = true; 

         map.put(str.charAt(i), t.get(str.charAt(i))+1); 
        } 
       }    

       if(fire){ 
        list.remove(x); 
       } 

       list.add(map); 

      }   
     } 
     System.out.println(list);  
    } 
} 
Смежные вопросы