К списку задач
Легко Решено: 0 Процент решений: 0%

Частота символов

Посчитайте, сколько раз встречается каждый символ.

Чему вы научитесь

  • Строить таблицу частот
  • Безопасно обновлять записи словаря
  • Возвращать результаты в нужном порядке

Условие

Посчитайте количество каждого символа в text, кроме пробелов. Для каждого уникального символа выведите одну запись в формате "символ:количество", отсортированную по коду символа (то есть заглавные буквы идут перед строчными).

Реализуйте функцию character_frequency(text).

Входные данные

text: Текст для подсчёта (ASCII-символы).

Выходные данные

Верните список записей вида "символ:количество".

Ограничения

0 ≤ длина ≤ 10 000

Примеры

Пример 1
Ввод:
text = "hello"

Ожидаемый вывод:
expected = ["e:1", "h:1", "l:2", "o:1"]
Ввод:
std::string text = "hello";

Ожидаемый вывод:
std::vector<std::string> expected = {"e:1", "h:1", "l:2", "o:1"};
Ввод:
string text = "hello";

Ожидаемый вывод:
string[] expected = new string[] {"e:1", "h:1", "l:2", "o:1"};

Пояснение

e:1, h:1, l:2, o:1 отсортированы по символу: ["e:1", "h:1", "l:2", "o:1"].

Пример 2
Ввод:
text = "a a A"

Ожидаемый вывод:
expected = ["A:1", "a:2"]
Ввод:
std::string text = "a a A";

Ожидаемый вывод:
std::vector<std::string> expected = {"A:1", "a:2"};
Ввод:
string text = "a a A";

Ожидаемый вывод:
string[] expected = new string[] {"A:1", "a:2"};

Пояснение

Пробелы пропускаются; "A" идёт перед "a": ["A:1", "a:2"].

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Пропускайте пробелы, но считайте каждый другой ASCII-символ ровно как он есть.

Подсказка 2

Накопите счётчики в таблице частот, затем выведите каждый символ один раз.

Подсказка 3

Сортируйте по коду символа, чтобы порядок верхнего и нижнего регистра естественно следовал ASCII.

Ожидаемая сложность

время O(n + m log m), доп. память O(m)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

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