解题思路:
- 统计的是数量问题,而且是要求最终进行排序,想到重复元素个数比较多,可以采用桶排序的思想进行排序存储
- 注意:
1.桶排序索引的设计
2.相同频率的元素的处理,采用string进行push_back,然后解析的时候再单独拿出每一个char
class Solution {
public:
string frequencySort(string s) {
unordered_map<char,int>mymap;
int maxflag = 0;
string res;
for(auto c:s){
// ++mymap[c]实际上是先将c插入到map中,如果c作为key不存在,那么map会自动赋给value=0值,然后再++就变成了1,如果存在就直接value+1
maxflag = max(maxflag,++mymap[c]);
}
vector<string>vec(maxflag+1);
for(auto [ch,num] : mymap){
// 将map的value作为桶的索引,桶内存放的是key的字符串,相同value的key会拼接成字符串
vec[num].push_back(ch);
}
for(int i = vec.size()-1;i>0;--i){
string temp = vec[i];
// 遍历字符串中的每一个字符
for(char c : temp){
// 同一个字符的个数实际就是i个
for(int k = 0;k<i;++k){
res.push_back(c);
}
}
}
return res;
}
};