LeetCode 692. 前 K 个高频单词
给定一个非空的单词列表,返回前 k 个出现频率最高的单词。
要求:
- 频率高的单词排在前面;
- 若多个单词频率相同,按字典序升序排列;
- 保证答案唯一,且
1 ≤ k ≤ 单词列表中不同单词的数量。
示例
输入: words = ["i","love","leetcode","i","love","coding"], k = 2
输出: ["i","love"]
解释: "i" 和 "love" 分别出现 2 次,"i" 字典序小于 "love",故排在前。
解法一:哈希表 + 自定义排序
思路分析
这个方案最直观。核心步骤其实就三步:统计频率、排序、截取。
- 统计频率:用哈希表(Python 的
dict)遍历一遍列表,记录每个单词出现的次数。 - 自定义排序:对哈希表的键值对进行排序。规则是优先按频率降序,频率相同时按单词字典序升序。
- 截取结果:取排序后的前
k个单词即可。
代码实现
from typing import List
class Solution:
def topKFrequent(self, words: List[str], k: int) -> List[str]:
# 1. 统计每个单词的出现频率
dictword = {}
for word in words:
dictword[word] = dictword.get(word, 0) + 1
# 2. 自定义排序
# key=lambda x: (-x[1], x[0])
# -x[1]:按频率降序(负号实现降序)
# x[0]:频率相同时按单词字典序升序
dictword_sorted = sorted(dictword.items(), key=lambda x: (-x[1], x[0]))
# 3. 截取前 k 个单词,组装结果列表
res = []
key, val dictword_sorted[:k]:
res.append(key)
res

