题目地址:
https://leetcode.com/problems/sort-characters-by-frequency/
给定一个长 n n n字符串 s s s,将其中的字符按照频率降序排列。频率相等则按字典序排序。题目保证 s s s只含英文字母和数字。
可以先将所有字符及其频率统计进一个哈希表中,然后将字符和其频数作为一个pair加入一个vector进行排序即可。代码如下:
class Solution {
public:
#define x first
#define y second
string frequencySort(string s) {
unordered_map<char, int> mp;
for (char ch : s) mp[ch]++;
vector<pair<char, int>> v(mp.begin(), mp.end());
sort(v.begin(), v.end(), [&](auto& p1, auto& p2) {
if (p1.y != p2.y) return p1.y > p2.y;
return p1.x < p1.x;
});
s.clear();
for (auto& p : v) s += string(p.y, p.x);
return s;
}
};
时空复杂度 O ( n ) O(n) O(n)。