Самая популярная буква на афишах
Условие
В городе Линтоград развесили длинную строку афиш: на каждой афише — одна маленькая латинская буква. Мэр хочет узнать, какая буква встречается чаще всего, чтобы заказать её в типографии оптом.
Если таких букв несколько, мэр выбирает самую маленькую по алфавиту.
Формат ввода
Одна строка s длины от 1 до 2000. Строка состоит только из маленьких латинских букв a–z.
Формат вывода
Выведите два значения через пробел: 1) букву, которая встречается чаще всего (при равенстве — самую маленькую), 2) сколько раз она встречается.
Ограничения
1 ≤ |s| ≤ 2000
Пример
Ввод:
abacaba
Вывод:
a 4Как решать — идея подхода
Приём: Подсчёт частот (массив на 26 букв)
Ключевое наблюдение: алфавит маленький (всего 26 букв), поэтому можно просто посчитать частоту каждой буквы и затем найти лучшую.
Приём: частотный массив. Он работает, потому что букву легко переводить в индекс 0…25, а длина строки до 2000 — один проход достаточно.
План:
- Заведи массив
cntдлины 26, заполненный нулями. - Пройди по строке
sи для каждой буквы увеличь соответствующий счётчик:
cnt[ord(ch) - ord('a')] += 1.
- Найди индекс
bestс максимальнымcnt[best]. - Важно: при равенстве частот не обновляй ответ — тогда сохранится более ранняя (то есть меньшая по алфавиту) буква.
- Преобразуй индекс обратно в букву
chr(best + ord('a'))и выведи её и частоту.
Сложность: O(|s| + 26), по памяти O(26) — фактически константа.
Частая ошибка: неправильно обработать равенство (например, обновлять ответ при >=). Это приведёт к выбору более поздней буквы, хотя нужна самая маленькая.
Разберись руками
Есть строка афиш: "abacaba". Нужно понять, какая буква встречается чаще всего. Если частота одинаковая, выбираем букву, которая раньше в алфавите.
- Отметь в строке все позиции (индексы с 0), где стоит буква 'a'. Строка: abacaba
- Теперь отметь все позиции, где стоит буква 'b'. Строка: abacaba
- Сколько раз в этой строке встречается буква-победитель (та, которая встречается чаще всех)? Введи число.
- Если бы максимум встретился у нескольких букв, какую надо выбрать?
Идея: Проверяешь, сколько раз встречается каждая буква в строке. Выбираешь ту, у которой частота самая большая. Если таких букв несколько, берёшь ту, которая раньше в алфавите, и выводишь её и её частоту.
Решить задачу с автопроверкой на Python →
Куда дальше
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Родителям: подготовка бесплатно — сколько стоит репетитор, что даёт бесплатный маршрут и как понять, что ребёнок занимается