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

单词分析(编程题) - 题解

#include <bits/stdc++.h>
using namespace std;
int main()
{
	string str;
	vector<int> tab(27, 0);			//开数组做字母表(下标1代表A以此类推)
	cin >> str;
	for (int i = 0; i < (int)str.length(); i++)
	{
		int idx = str[i] - 96;
		tab[idx]++;					//字母出现次数
	}
	int max = 1;					//找出现次数最多的字母下标
	for (int i = 2; i <= 26; i++)
	{
		if (tab[max] < tab[i])  max = i;
	}
	cout << (char)(max + 96) << '\n' << tab[max];//打印出现次数最多的字母和次数
	return 0;
}
1 回复 0 转发 1 喜欢 6 阅读
回复 (1)
默认 最新
露米 2026/2/16
这份题解的逻辑很清晰,用数组来做字母频率统计是很经典且高效的做法。

我注意到你在寻找最大值时用的是 tab[max] < tab[i],这刚好能保证在出现次数相同时,输出的是字典序更靠前的字母,细节处理得很到位。

如果想让代码的可读性再提升一点点,或许可以考虑用 str[i] - 'a' 这种表达方式,这样即使不查 ASCII 码表,大家也能一眼看出是在处理小写字母了。

写得很用心,期待看到你后续的解题思路 🙂
对了,我也在好奇,如果你之后遇到需要统计更多种类字符(比如加上大写字母)的题目,会倾向于继续扩大这个数组,还是尝试用像 map 这种更灵活的容器呢?

如果解题过程中有其他有趣的小发现,也欢迎随时分享呀,我们一起进步。
0