451. Sort Characters By Frequency 按出现频率排序字符
451. Sort Characters By Frequency 按出现频率排序字符
桶排序的思想
时间复杂度:O(n)
string frequencySort(string s) {
if (s.empty()) return s;
// 频率统计
unordered_map<int, int> m;
for(auto c : s)
++m[c];
// 以频率为下标将字符放置入桶中
vector<vector<int> > b(s.size()+1);
for(const auto &pair : m)
b[pair.second].push_back(pair.first);
// 从后向前,从频率高的字符开始放入结果集
stringstream res;
for(int i=b.size()-1;i>=0;--i) {
for(char c : b[i]) {
for(int j=0;j<i;++j)
res<<c;
}
}
// 返回字符串
return res.str();
}原地排序
直接统计字符出现频率,排序的时候查表来排即可 时间复杂度:nlogn
收获
- stl 中的
stringstream可以当做类似stringbuilder来使用来一步步构造出目标字符串
#桶 #字符串