[Algorithm] C++ 统计字符频率并排序输出

127 阅读1分钟

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;
}