给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 输入:第1行为k值,第2行单词列表,单词列表以end结尾,end不属于单词列表中的单词。 2 i love leetcode i love coding end 输出: i love
时间: 2024-02-20 20:56:08 浏览: 76
单词的词频统计,按出现的频率递减的次序输出
这是一个经典的算法问题,可以使用哈希表和堆来解决。以下是Python代码实现:
```python
import heapq
from collections import Counter
k = int(input())
words = []
while True:
word = input()
if word == 'end':
break
words.append(word)
count = Counter(words)
heap = [(-freq, word) for word, freq in count.items()] # 使用堆来获取前k个出现次数最多的单词
heapq.heapify(heap)
top_k = [heapq.heappop(heap) for _ in range(k)]
# 按照要求排序
ans = []
for freq, word in top_k:
ans.append(word)
ans.sort()
# 输出结果
for word in ans:
print(word)
```
输入样例:
```
2
i love
leetcode
i
love
coding
end
```
输出样例:
```
i
love
```
阅读全文