用C++实现 给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 输入:第1行为k值,第2行单词列表,单词列表以end结尾,end不属于单词列表中的单词。 2 i love leetcode i love coding end 输出: i love
时间: 2024-02-05 16:12:02 浏览: 72
基于qt c++统计新概念英语中单词出现的次数、频率
以下是用C++实现的代码:
```c++
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
bool cmp(pair<string, int>& a, pair<string, int>& b) {
// 频率相同按字母序排序
if (a.second == b.second) {
return a.first < b.first;
}
// 频率不同按频率排序(降序)
return a.second > b.second;
}
vector<string> topKFrequent(vector<string>& words, int k) {
unordered_map<string, int> m;
for (auto& w : words) {
m[w]++;
}
vector<pair<string, int>> v(m.begin(), m.end());
sort(v.begin(), v.end(), cmp);
vector<string> res;
for (int i = 0; i < k; i++) {
res.push_back(v[i].first);
}
return res;
}
int main() {
int k;
cin >> k;
vector<string> words;
string word;
while (cin >> word && word != "end") {
words.push_back(word);
}
vector<string> res = topKFrequent(words, k);
for (auto& w : res) {
cout << w << " ";
}
cout << endl;
return 0;
}
```
具体思路是利用哈希表统计单词出现次数,然后将键值对存储在vector中并按照出现频率和字母序排序,最后取前k个键值对返回即可。
阅读全文