Частотный анализ
Вы решили задачу. Теперь можно сравнить подходы.
Подсчитываем частоты и сортируем по убыванию частоты, затем по слову.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Составной ключ сортировки
Отрицательная частота превращает убывание в обычную сортировку по возрастанию; второй компонент разрешает равенства.
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).
На что обратить внимание
- reverse=True для пары (частота, слово) развернёт и алфавитный порядок, что неверно.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.