算法思想:
和我写的topK答案思想差不多,都是利用了unordered_map和multimap的特点:
- 创建统计字符出现次数的无序哈希表hashmap;
- 将hashmap中的pair的second和first调换(即出现次数变成关键字,字符变成关键字对应的值),添加到可重复(可重复的原因:有些数值出现的次数可能相同)关键字的有序(greater是按大到小排序)哈希表ordermap中;
- 将ordermap中的关键字对应的值按照关键字数值大小排列组成最终输入字符串res。
C++
class Solution {
public:
string frequencySort(string s) {
unordered_map<char, int> hashmap;
multimap<int, char, greater<int>> ordermap;
string res;
for(int i = 0; i < s.length(); i++){
hashmap[s[i]]++;
}
for(auto & ech : hashmap){
ordermap.insert(pair<int, char>(ech.second, ech.first));
}
for(auto & ech : ordermap){
for(int i = 0; i < ech.first; i++){
res += ech.second;
}
}
return res;
}
};