题解 | 字符统计

#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
using namespace std;

int main() {
    string s;
    getline(cin, s);
    vector<int> v(36, 0);
    for (auto c : s) {
        if (isalpha(c)) {
            v[c - 'a' + 10]++;
        } else {
            v[c - '0']++;
        }
    }
    vector<pair<int, int>> v2;
    for (int i = 0; i < 36; ++i) {
        if (v[i] > 0) v2.emplace_back(i, v[i]);
    }
    //按出现次数排序,若出现次数相同,则按照 ASCII 码由小到大排序。
    sort(v2.begin(), v2.end(), [&](const pair<int, int>& p1,
    const pair<int, int>& p2) {
        if(p1.second == p2.second){
             return p1.first < p2.first;
        }
        return p1.second > p2.second;
    });
    for (auto i : v2) {
        if (i.first > 9) {
            cout << (char)(i.first - 10 + 'a');
        } else {
            cout << i.first;
        }
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务