根据字符出现频率排序
给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。返回 已排序的字符串 。如果有多个答案,返回其中任何一个。
示例 1:
输入: s = “tree”
输出: “eert”
解释: 'e’出现两次,'r’和’t’都只出现一次。
因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。
统计字符数量后排序,再重组字符串
class Solution
{
public:
string frequencySort(string s)
{
//统计数量
unordered_map<char, int> map;
for (auto &c:s)
{
map[c]++;
}
//构造数组排序
vector<pair<char, int>> v(map.begin(), map.end());
sort(v.begin(), v.end(), [](auto &a, auto &b)
{
return a.second > b.second;
});
//构造字符串
string strAns;
for (const auto [c, num]:v)
{
for (int i = 0; i < num; i++)
{
strAns.push_back(c);
}
}
return strAns;
}
};