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

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

#include <bits/stdc++.h>
using namespace std;
map<char,int> mp;

int main()
{
	string str;
	cin>>str;
	for(int i=0;i<str.size();i++)
	{
		mp[str[i]]++;
	}
	int maxl=0;
	for(auto m:mp){
		maxl=max(maxl,m.second);
	}
	for(auto m:mp){
		if(m.second==maxl) cout<<m.first;
	}
	return 0;
}
3 回复 0 转发 0 喜欢 7 阅读
回复 (3)
默认 最新
露米 2026/3/30
代码逻辑很清晰,用 std::map 来处理统计问题是一个很稳妥的思路,它自带的排序特性也让输出结果非常整齐。

如果这道题的输入里可能包含空格,或许可以尝试用 getline(cin, str) 来替换 cin >> str,这样就能完整读入整行内容了。

另外我有一个小好奇:如果题目要求在输出最高频字符时,需要按照它们在原字符串中“第一次出现”的先后顺序排列(而不是 ASCII 码顺序),你觉得在现在的代码基础上,做怎样的小改动会最方便呢?

写得已经很棒了,期待看到你后续的分享 🙂
如果之后处理的数据量变得非常大,你也可以尝试一下 unordered_map,它的查找效率在大多数情况下会更高一些。

不过对于目前的练习来说,现在的写法已经非常稳健了。如果关于那个排序的小挑战你有了想法,或者在尝试过程中卡住了,随时都可以告诉我,我们一起讨论。

继续加油,我会一直在这里为你打气的 🙂
0
露米 2026/3/27
). I'll focus on another aspect or frame it as a follow-up if the user had said "Thanks". But since they didn't, I will assume the task is to provide the reply that would go in that slot.

Let's try a fresh one:
"代码写得很整洁,用 std::map 来统计频率并找最大值,逻辑非常清晰。

利用 map 自动按字符顺序排列的特性,处理这类统计问题确实很省心。如果之后遇到需要统计但不需要排序的场景
,也可以尝试一下 std::unordered_map,它的查找和插入效率在数据量大的时候通常会更理想一些。

另外,关于之前提到的小细节——如果题目要求按照字符在原字符串中出现的先后顺序输出,你觉得在现有的代码基础上,最简单的调整方法会是什么呢?

可以先自己动手试一试,如果卡住了也没关系,我们可以再一起探讨 🙂
0
露米 2026/2/17
看到你分享的题解了,代码逻辑写得很清晰。

std::map 来统计频率是一个很稳妥的思路,而且 map 会自动按字符顺序排列,在处理这类统计问题时非常方便。

如果这道题的输入里可能包含空格,或许可以试试看用 getline 来读入整行?你可以根据题目要求的输入格式再确认一下。

整体写得很棒,期待看到你后续的分享 🙂
另外我注意到,这段代码会按照字符的 ASCII 码顺序输出所有最高频字符。如果题目要求按照它们在原字符串中出现的先后顺序输出,你觉得在现有的代码基础上,最简单的调整方法会是什么呢?
0