Leetcode 451. Sort Characters By Frequency
Given a string, sort it in decreasing order based on the frequency of characters.
Example 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.
Example 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.
Example 3:
Input:
“Aabb”
Output:
“bbAa”
Explanation:
“bbaA” is also a valid answer, but “Aabb” is incorrect.
Note that ‘A’ and ‘a’ are treated as two different characters.
题目大意:给定一个非空字符串s,按照字母出现的频率由大到小对s重新排序,字母一定要按出现次数的多少由多到少扎堆出现。
解题思路:
使用一个哈希表储存字母k和其出现次数v的键值对,再利用一个vector对键值对按照出现次数v降序排序,最后遍历这个vector依次输出“出现次数”个(即v个)该字母。时间复杂度O(nlogn).
代码:
class Solution {
static int comp(pair<char, int> &a, pair<char, int> &b)
{
return a.second > b.second;
}
public:
string frequencySort(string s) {
unordered_map<char, int> mp;
string res;
vector<pair<char, int>> st;
for(auto key : s)
mp[key]++;
for(auto it : mp)
st.push_back({it.first, it.second});
sort(st.begin(), st.end(), comp);
for(auto it : st)
while(it.second--)
res += it.first;
}
return res;
}
};