给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
输入: “tree”
输出: “eert”
解释: 'e’出现两次,'r’和’t’都只出现一次。 因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。
class Solution {
public:
string frequencySort(string s) {
unordered_map<char, int> m;
string res = "";
for (auto c : s)
{
if (!m.count(c))
m.emplace(c, 0);
else m[c]++;
}
while (m.size())
{
char c = selectMax(m);
int cnt = m[c];
for (int i = 0; i <= cnt; i++)
res += c;
m.erase(c);
}
return res;
}
char selectMax(unordered_map<char, int> m)
{
int max = -1;
char ans;
for (auto it : m)
{
if (it.second > max)
{
max = it.second;
ans = it.first;
}
}
return ans;
}
};