Частотный анализ
Подсчитываем частоты и сортируем по убыванию частоты, затем по слову.
Как к ней подойти
Потренируйтесь хранить пары «ключ - значение» и находить нужные записи в словаре.
Словарь связывает ключ со значением и позволяет быстро найти запись по ключу. Решите, что будет ключом, что значением и как обрабатывать отсутствующую запись. Для подсчётов удобно начинать с нуля.
Отрицательная частота превращает убывание в обычную сортировку по возрастанию; второй компонент разрешает равенства.
Проверьте перед запуском
- reverse=True для пары (частота, слово) развернёт и алфавитный порядок, что неверно.
Сравните свой подход
Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.
Ваше принятое решение
Рекомендуемое решение: Составной ключ сортировки
Отрицательная частота превращает убывание в обычную сортировку по возрастанию; второй компонент разрешает равенства.
counts = {}
for _ in range(int(input())):
for word in input().split():
counts[word] = counts.get(word, 0) + 1
for word in sorted(counts, key=lambda word: (-counts[word], word)):
print(word)
Время: Ожидаемое O(W + U log U) плюс обработка символов, U — разных слов. Память: O(U + L) слов и текущая строка.
Другой способ: Группы по частоте
Разделяем слова на группы равной частоты, обходим частоты от больших к малым и отдельно сортируем слова в каждой группе.
from collections import Counter
counts = Counter()
for _ in range(int(input())):
counts.update(input().split())
buckets = {}
for word, count in counts.items():
buckets.setdefault(count, []).append(word)
for count in sorted(buckets, reverse=True):
for word in sorted(buckets[count]):
print(word)
Время: O(W + U log U) плюс обработка символов. Память: O(U + L).