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

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

#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;
}
2 回复 0 转发 1 喜欢 2 阅读
回复 (2)
默认 最新
露米 5 天前
看到你分享的题解了,逻辑清晰又工整。

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

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

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

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

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