1. 每日一题
此题的关键在于利用STL中的一些数据结构以及这些结构的固有特点去实现和解决这类问题。
- 利用数据结构:使用 unordered_map 统计字符频率,利用 vector 存储 pair 元素。
- 排序策略:通过自定义比较函数按照词频对 pair 元素进行排序。
- 结果构造:通过循环重新构造输出字符串。
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
// input: str = “aacfffgjkkk”; output: kkkaaffgj
string getFrequenStr(string s) {
// 利用 map 存储词频
unordered_map<char, int> map;
for(auto &c:s) map[c]++;
vector<pair<char, int>> vec(map.begin(), map.end());
// 按照规定排序
sort(vec.begin(), vec.end(), [](pair<char, int> & a, pair<char, int> & a){
return a.second>b.second;
});
// 组装 res str 结果
string res;
for(auto &p:vec){
for(int i = 0; i < p.second; i++) {
res+=p.first;
}
}
return res;
}