Leetcode 451 根据字符出现的频率排序
问题重述
给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
示例 1:
输入: “tree” 输出: “eert”
解释:
'e’出现两次,'r’和’t’都只出现一次。
因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。
思路
和347的思路相同,都是用到了桶存储排序。不懂得可以去看347的思路。
最终代码
class Solution {
public:
string frequencySort(string s) {
unordered_map<int, int> counts;
for (const auto & c : s) {
++counts[c];
}
vector<string> buckets(s.size() + 1);
for (const auto & p : counts) {
buckets[p.second].append(p.second, p.first);//字符串中append就是在字符串后面添加字符;
}
string ans;
int k = 0;
for (int i = s.size(); i > 0; --i) {
ans.append(buckets[i]);
}
return ans;
}
};