Получить количество символов

1

Мне нужно получить счет каждого повторного персонажа отдельно.... Я пробовал... но он возвращает только счет уникального количества символов...

Вход:

SSDDVVDSSS

вывод:

S - 5
D - 3
V - 2

вот мой код

public class q2 {

public static void main(String[] args) {

   System.out.println(countUniqueCharacters("SSDDVVDSSS"));
}


public static int countUniqueCharacters(String input) {
boolean[] isItThere = new boolean[Character.MAX_VALUE];
for (int i = 0; i < input.length(); i++) {
    isItThere[input.charAt(i)] = true;
}

int count = 0;
for (int i = 0; i < isItThere.length; i++) {
    if (isItThere[i] == true){
        count++;
    }
}

return count;
}


}
Теги:
string-split

3 ответа

1
Лучший ответ

Ниже перечислены проблемы в вашем коде:

  1. вы определяете массив с размером 65535, который не нужен для 26 символов.
  2. Вы определили логический массив, в котором каждый элемент будет хранить два значения: true или false, что очень необходимо, если вам нужно увидеть, существует ли символ в вашей строке, но не подходит для вашего алгоритма.
  3. У вас есть общая переменная счетчика, которая даст вам длину строки, т.е. Сколько символов у вас есть в вашей строке и не то, что вам нужно.

Существует несколько способов решения этой проблемы:

  • Используя массив int с индексом от 0 до 26, который поддерживает подсчет символа AZ и, наконец, вы печатаете счетчик:

        public static void main(String[] args) {
        int[] counts = countUniqueCharacters("SSDDVVDSSS");
        for (int i = 0; i < counts.length; i++) {
            if (counts[i] != 0) {
                System.out.println("char " + ((char) ('A' + i)) + " repeated " + counts[i] + " times");
            }
        }
    }
    
        public static int[] countUniqueCharacters(String input) {
        int[] counts = new int[26];
        for (int i = 0; i < input.length(); i++) {
            counts[input.charAt(i) - 'A']++;
        }
        return counts;
    }
    
  • Другой способ - использовать карту с символом в качестве ключа и int как значение, которое будет представлять собой счетчик повторения этого символа.

0

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

Попробуй это:

public class q2 {

public static void main(String[] args) {

    countUniqueCharacters("SSDDVVDSSS");
}


public static void countUniqueCharacters(String input) {


    Map<Character,Integer>  map = new HashMap<Character, Integer>();

    for (int i = 0; i < input.length(); i++){

        if (map.get(input.charAt(i)) == null){
             map.put(input.charAt(i),1);
        }
        else{
            map.put(input.charAt(i),map.get(input.charAt(i))+1);
        }
    }

     System.out.print(map);
}

}

  • 0
    Могу ли я положить это в массив
  • 0
    Да, ты можешь. что-то вроде: int countts [] = new int [(int) Character.MAX_VALUE];
0
public static void main(String[] args) {
        String str = "SSDDVVDSSS";
        int counts[] = new int[(int) Character.MAX_VALUE];

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            counts[(int) c]++;
        }

        for (int i = 0; i < counts.length; i++) {
            if (counts[i] > 0)
                System.out.print((char) i + "-" + counts[i] + "\n");
        }
    }
  • 0
    Мне нужно получить минимальное количество повторяющихся символов. Но оно возвращает 0. Как я могу это сделать?
  • 0
    @ChaturaMohotti Вышеупомянутое решение дает результат, подобный D-3 S-5 V-2. Каковы ваши точные требования, пожалуйста, объясните.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню