Подсчет вхождений каждого уникального персонажа - PullRequest
2 голосов
/ 06 ноября 2010

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

Ответы [ 3 ]

12 голосов
/ 06 ноября 2010

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

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

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

it is nice and sunny today.

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

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

Как бы мы это попробовали?

Выполнение этого вручную может быть таким:

Сначала мы находим новый символ 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) можно использовать для отслеживания того, сколько раз персонаж появлялся. В этом случае клавиша будет символом, а значение будет подсчитывать, сколько раз появляется символ.

Удачи!

5 голосов
/ 06 ноября 2010

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

  1. Итерация по строке, char по char.
  2. Поместите char в ключ hashmapи инициализировать его значение 1 (количество).Теперь, если символ встречается снова, обновите значение (count + 1).Еще добавьте новый символ в ключ и снова установите его значение (count = 1)
0 голосов
/ 10 декабря 2012
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);       
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...