需要注意如果频率相同则按字典序排序:
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
unordered_map<string, int> f;
for (auto w: words)
f[w] += 1;
auto cmp = [](pair<string, int> a, pair<string, int> b)
{
if (a.second == b.second)
return a.first > b.first;
return a.second < b.second;
};
priority_queue<pair<string, int>, vector<pair<string, int>>,
decltype(cmp)> q(cmp);
for (auto i: f)
q.push(i);
vector<string> s;
while (k--)
{
s.push_back(q.top().first);
q.pop();
}
return s;
}
};