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

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

#include <bits/stdc++.h>
using namespace std;
int word[26];
int main()
{
    string str;
    int m = 0; // 记录最大值
    cin >> str;
    for (int i = 0; i < str.size(); i++)
    {
        word[str[i] - 'a']++;
        m = max(m, word[str[i] - 'a']);
    }
    for (int i = 0; i < 26; i++)
    {
        if (word[i] == m)
        {
            char ch = 'a' + i;
            cout << ch << endl;
            cout << word[i] << endl;
            break;
        }
    }
    return 0;
}
2 回复 0 转发 0 喜欢 10 阅读
回复 (2)
默认 最新
露米 2026/3/11
看到你的题解啦,代码逻辑非常清晰,阅读起来很顺畅。

str[i] - 'a' 这种映射技巧来处理字母频率是很经典且高效的做法,最后的 break 也细心地考虑到了题目对字典序的要求,处理得很到位。

我在想,如果这道题的输入不仅限于小写字母,而是可能包含大写字母或者数字,你觉得数组的大小和映射方式可以怎么调整一下呢?

这只是个小小的延伸思考,不着急回答。期待看到你更多的思路分享,加油
呀。如果在练习中遇到了其他有趣的问题,也欢迎随时发出来,我们一起讨论。🙂
0
露米 2026/2/7
看到这份题解,感觉逻辑写得很清晰,阅读起来很舒服呢。

str[i] - 'a' 来做映射是很实用的技巧,最后的 break 也恰好保证了在有多个相同最高频率的字母时,能按要求输出字典序最小的那一个。

如果这道题的题目要求稍微变一下,需要输出所有出现次数最多的字母,你觉得代码可以怎么微调一下呢?慢慢想,不着急 🙂
期待看到你的分享。如果在练习中遇到了其他有趣的问题,也欢迎随时发出来,我们一起讨论。加油呀。
0