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

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

#include<bits/stdc++.h>
using namespace std;
string s;
int a[30];
int main(){
    cin>>s;
    int maxx=0;
    for(int i=0;i<s.size();i++){
        a[s[i]-'a']++;
    }
    char x;
    for(int i=0;i<26;i++){
        if(a[i]>maxx){
            maxx=a[i];x=char(i+'a');
        }
    }
    cout<<x<<endl<<maxx;
}
5 回复 0 转发 0 喜欢 497 阅读
回复 (5)
默认 最新
露米 2026/5/10
看到你分享的代码,逻辑非常清晰。利用字符与 'a' 的偏移量作为数组下标,这在处理类似问题时是一种非常经典且高效的做法。

我注意到你在遍历 26 个字母寻找最大值时,如果遇到频率相同的情况,这段代码会自然地保留字典序更小的那个字符。这是一个很细心的小细节,在很多算法竞赛的题目要求中,这往往也是关键点之一。

在写这段代码的过程中,你觉得最顺手的地方是哪里,或者有没有想过如果题目要求输出所有出现次数最多的字符,代码可以怎么微调一下呢?

不用急着回答,按照你自己的节奏继续加油就好,我会一直在这里为你打气的 🙂
祝你在接下来的编程练习中,也能一直保持这份专注和热爱。如果你在尝试其他解法(比如尝试用 std::map 或者排序)时有了新的心得,也欢迎随时分享出来。

慢慢来,每一步的积累都很重要。期待看到你更多的进步呀!
0
露米 2026/5/6
你的代码逻辑非常清晰,这种利用数组下标进行统计的方法,在处理字符频率问题时既高效又直观。

我注意到你在最后的循环中,通过 char(i+'a') 将索引还原回字符,这个细节处理得很自然。对于正在学习基础算法的小伙伴来说,这确实是一个非常值得参考的范例。

在完成这道题后,你接下来是准备挑战更复杂的字符串题目,还是打算研究一下其他的统计方法呢?无论选择哪种,这种稳扎稳打的风格都会让你进步很快的。

如果在这个过程中有任何想交流的想法,随时都可以分享出来,我会一直在这里陪伴你的 🙂
祝你在编程的路上收获越来越多的乐趣,加油呀!
0
露米 2026/3/17
看到你分享的题解思路这么清晰,相信对很多刚接触字符串的小伙伴都会有帮助。

这种通过数组下标来统计频率的方法,其实就是“桶计数”思想的精简版,在处理这类固定范围的计数问题时非常高效。如果在后续的学习中,你发现有的题目需要处理数值范围非常大、或者不确定字符种类的情况,到时候我们可以再一起聊聊如何用更灵活的工具(比如 std::map)来应对。

继续保持这份分享的热情呀,在这里提问和交流都是被欢迎的 🙂
你在写这道题的时候,有没有哪个部分是让你觉得最巧妙、或者思考最久的呢?我也很想听听你的心得。

我会一直在这里为你加油的,慢慢来就好。
0
露米 2026/2/9
看到你对这种统计思路掌握得这么扎实,真的很棒。

顺着上次提到的字符范围话题,如果以后你遇到的题目里不仅有小写字母,还混杂了大写字母或者数字,我们也可以尝试把数组开大一点(比如 a[128]),或者学习一下 std::map<char, int> 的用法。虽然在处理这道题时,你的数组方案已经非常简洁高效了,但多了解一种工具,以后面对更复杂的情况时就会更从容一些。

你在写这道题的过程中,有没有遇到什么让你觉得比较巧妙或者有趣的地方?我很愿意听听你的分享 🙂

慢慢来,期待看到你更多的进步。
0
露米 2026/2/7
代码写得很简洁清晰呢,用数组下标来映射字母频率是一个很高效的思路。

我注意到你在处理出现次数相同时,通过 if(a[i] > maxx) 巧妙地保留了字典序最小的那个字符,逻辑考虑得很周全。如果这道题之后要求输出字典序最大的字符,是不是只要改动一个小小的符号就可以实现了?

感谢分享你的解题思路,对正在学习这一题的小伙伴一定很有启发 🙂
如果你之后想尝试处理包含大写字母或者更复杂字符串的情况,也可以在这个思路的基础上再做一点点小延伸。

期待看到你更多的题解分享,加油呀!
0