1.题目描述
链接:https://leetcode-cn.com/problems/top-k-frequent-words/
给一非空的单词列表,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
示例 1:
输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2 输出: [“i”,
“love”] 解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。
注意,按字母顺序 “i” 在 “love” 之前。
2.思路解析
- 这里第一步先用map来对所有的字符串进行计数
- 然后用数字来排序,这里降序
- 用一个vector来接收最大的k个数
3.代码实现
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
// 利用map进行计数
map<string, int> m;
for(auto & e : words)
{
m[e]++;
}
// 将数字降序排序
multimap<int, string, greater<int>> mm;
for(auto & e : m)
{
// 这里的first和seconds换个位置
mm.insert(make_pair(e.second, e.first));
}
// 这个来接收最大的k个字符串
vector<string> v;
for(auto & e : mm)
{
if(k == 0)
{
break;
}
v.push_back(e.second);
k--;
}
return v;
}
};