Given a string, sort it in decreasing order based on the frequency of characters. 【原题描述】
例子1:
Input:
"tree"
Output:
"eert"
Explanation:
'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.
例子2:
Input:
"cccaaa"
Output:
"cccaaa"
Explanation:
Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
Note that "cacaca" is incorrect, as the same characters must be together.
解题代码
#include <iostream>
#include <string>
#include <unordered_map>
#include <algorithm>
using namespace std;
string frequencySort(string s) {
unordered_map<char, int> freq;
vector<string> bucket(s.size() + 1, "");
string res;
for (char c : s) freq[c]++;
// 保存在桶内,n表示char的频率
for (auto& it : freq) {
int n = it.second;
char c = it.first;
bucket[n].append(n, c);
}
// 频率由高到低,降序排列
for (int i = s.size(); i>0; i--) {
if (!bucket[i].empty())
res.append(bucket[i]);
}
return res;
}
查找表问题,其排序主要体现在后面几句。