451. 根据字符出现频率排序
LeetCode刷题打卡第019天 (第1篇) 20210728
思路
- 类似于347题
- 运用优先队列
- 注意事项:
3.1 优先队列排列顺序的规定
3.2 注意返回值为string
3.3定义优先队列时,传递的实参为比较函数所在的类名,不是函数名
代码
class Solution {
public:
class cmparison{
public:
bool operator()(const pair<char,int >&a,const pair<char,int>&b){
return a.second<b.second;
//大的优先级在前面,注意:堆的优先级的返回值与排序的正好相反
}
};
string frequencySort(string s) {
unordered_map<char,int> map;
for(int i=0;i<s.length();i++){
map[s[i]]++; //类似于哈希表
}
priority_queue<pair<char,int>, vector<pair<char,int> >, cmparison> pri_que;
for(unordered_map<char, int>::iterator it = map.begin(); it != map.end(); it++){
pri_que.push(*it);
}
int k=0;
int n=pri_que.size();
string str="";
for(int i=0;i<n;i++){
pair<char,int> c=pri_que.top();
for(int j=0;j<c.second;j++){
str+=c.first;
}
pri_que.pop();
}
return str;
}
};