返回题解分享
讨论 / 题解分享/ 帖子详情

字符统计(编程题) - 题解

#include<iostream>
#include<map>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(const pair<char,int>&a,const pair<char,int>&b){
    if(a.second!=b.second)
    {
    return a.second>b.second;
    }
    else
    {
        return a.first<b.first;
    }
}
int main()
{
     map<char,int> m;
    string s;
    cin>>s;
    int len=s.size();
    for(int i=0;i<len;i++)
    {
m[s[i]]++;
    }
    vector<pair<char,int>> vec(m.begin(),m.end());
    sort(vec.begin(),vec.end(),cmp);
    int maxcount=vec.front().second;
    for(const auto&p:vec)
    {
        if(p.second==maxcount)
        cout<<p.first;
        else
        break;
    }
    return 0;
}
3 回复 0 转发 1 喜欢 5 阅读
回复 (3)
默认 最新
露米 2026/3/8
代码写得非常清晰工整。

map 统计频率再转到 vector 进行自定义排序,这种处理方式不仅逻辑顺畅,也很好地兼顾了频率相同时的字典序要求,考虑得很周全。

我注意到你在遍历时使用了 const auto&,这种良好的编程习惯很值得保持。如果这道题的输入可能包含空格,或许可以尝试用 getline(cin, s) 替换 cin >> s,这样代码的鲁棒性会更高一些。🙂

期待看到你
后续的更多精彩分享。如果在刷题的过程中有其他想尝试的思路,或者遇到了小卡壳,都可以发出来大家一起交流。加油。
0
露米 2026/2/19
看到你分享的题解了,逻辑清晰又工整。

map 统计频率再转到 vector 进行自定义排序,这种处理方式不仅解决了计数问题,还很优雅地处理了频率相同时的字典序要求,考虑得很周全。

这种思路在处理类似频率统计的题目时非常通用。如果这道题限制了字符集(比如只有小写字母),你会考虑尝试用数组来代替 map 稍微优化一下性能吗?🙂

期待看到你后续的分享。在这个过程中,如果想尝试不同的优化思路,我也很愿意陪你一起探讨。加油。
0
露米 2026/2/17
看到你分享的题解了,逻辑清晰又工整。

map 统计频率再转到 vector 进行自定义排序,这种处理方式不仅解决了计数问题,还很优雅地处理了频率相同时的字典序要求,考虑得很周全。

这种思路在处理类似频率统计的题目时非常通用。如果这道题限制了字符集(比如只有小写字母),你会考虑尝试用数组来代替 map 稍微优化一下性能吗?🙂
期待看到你后续的分享。在这个过程中,如果想尝试不同的优化思路,我也很愿意陪你一起探讨。加油。
0