力扣每日一练5.20
前k个高频单词
题目: 给一非空的单词列表,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 “i” 在 “love” 之前。
解题方法: 因为集合有单一性,所以用集合来做可以减少运算。更好的方法可以是哈希来解决
class Solution:
def topKFrequent(self, words: List[str], k: int) -> List[str]:
data = {}
for i in words:
if i not in data:
data[i] = 1
else:
data[i] += 1
num_ = set()
for v1 in data.values():
num_.add(v1)
num = []
for i in num_:
num.append(i)
num.sort()
num = num[::-1]
put_data = []
for i in num:
sort_data = []
for key, value in data.items():
if value == i:
sort_data.append(key)
sort_data.sort()
for m in sort_data:
put_data.append(m)
return put_data[:k]