Sort Characters by Frequency
Sort Characters by Frequency
Bucket Sort Approach
Time complexity: O(n)
string frequencySort(string s) {
if (s.empty()) return s;
// Count frequencies
unordered_map<int, int> m;
for(auto c : s)
++m[c];
// Place characters into buckets indexed by frequency
vector<vector<int> > b(s.size()+1);
for(const auto &pair : m)
b[pair.second].push_back(pair.first);
// Start from highest frequency and build result
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();
}In-place Sorting
Count character frequencies directly. Sort using the frequency table. Time complexity: n log n
Key Takeaway
- STL’s
stringstreamworks likeStringBuilderfor building target strings step by step
#bucket #string