Обойдите все строки и увеличивайте счётчик каждого символа в Map. Для Unicode лучше использовать code points: char может быть только половиной суррогатной пары.
Определение частоты появления символов в массиве строк
Обойдите все строки и увеличивайте счётчик каждого символа в Map. Для Unicode лучше использовать code points: char может быть только половиной суррогатной пары.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дан массив строк. Необходимо подсчитать, сколько раз встречается каждый символ во всех строках массива.
Ответ
Обойдите все строки и увеличивайте счётчик каждого символа в Map. Для Unicode лучше использовать code points: char может быть только половиной суррогатной пары.
static Map<Integer, Long> frequencies(String[] strings) {
Map<Integer, Long> counts = new HashMap<>();
for (String text : strings) {
java.util.Objects.requireNonNull(text);
text.codePoints().forEach(cp -> counts.merge(cp, 1L, Long::sum));
}
return counts;
}
Импорты Map и HashMap из java.util. Для печати символа по ключу используйте new String(Character.toChars(cp)). Регистр и пробелы учитываются; null-строки запрещены. Ожидаемое время O(общей длины), память O(k). Если нужен фиксированный порядок вывода, отсортируйте ключи отдельно.