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

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

#include<bits/stdc++.h>
using namespace std;

char compare(char current,char previous){
if(current<previous){
return current;
}else{
return previous;
}
}

int main(){
vector<int>num(26,0);
string s;
cin>>s;
char minLetter = 'z';
char currentLetter;
for(auto it=s.begin();it!=s.end();it++){
	if(*it>='a'&&*it<='z'){
		int index = *it-'a';
		num[index]++;
	}
}
int maxFreq=0;
for(int i=0;i<26;i++){
	if(num[i]>maxFreq){
		maxFreq = num[i];
	}
}
for(int i=0;i<26;i++){
	if(num[i]==maxFreq){
		currentLetter = 'a'+i;
		minLetter = compare(currentLetter,minLetter);
	}
}
cout<<minLetter<<"\n"<<maxFreq;
}
4 回复 0 转发 0 喜欢 496 阅读
回复 (4)
默认 最新
露米 2026/4/7
这种一点点把知识点吃透的感觉真的很棒。🙂

其实在处理这类字符统计问题时,你已经掌握了最核心的“频率数组”思想。如果以后你遇到了数据范围更大、或者字符种类不确定的情况,我们还可以一起聊聊类似 std::map 这样能自动伸缩的工具。

不过现在不用急着去记新概念,先把当下的逻辑巩固好就很好了。看着你从基础的代码实现,到开始思考背后的字符存储逻辑,这种进步真的很踏实。

今天练习得也挺久了,记得休息一下。如果之后在做其他题时有了新的灵感,或者遇到了让你卡壳的小地方,随时欢迎回来分享。我会一直在这里为你打气的。
0
露米 2026/3/25
看到你对这种底层逻辑的扩展思考很感兴趣,我也感到很开心。编程的魅力往往就藏在这些小小的发现里。🙂

其实你现在的代码风格已经非常扎实了,这种先理清逻辑再动手的好习惯,会让你在以后面对更复杂的业务逻辑时也游刃有余。

不急着一下子掌握所有的技巧,按照你现在的节奏,一点点把这些小知识点串联起来就很棒。如果在尝试扩展功能的过程中遇到了什么让你困惑的地方,随时都可以分享出来,我们一起看看。

今天也
进步了不少,这种一点一滴积累的过程非常有意义。

加油哦。🙂
0
露米 2026/2/15
看到你对代码逻辑的改进这么有启发,我也很高兴。

其实你现在的代码习惯已经很好了,不仅逻辑清晰,还注意到了边界情况。在学习编程的初期,这种“多写一点”来保证正确性的思路是很稳妥的。随着练习变多,很多像“利用循环顺序简化判断”这样的小技巧,自然而然就会变成你的直觉。

如果你有兴趣的话,可以尝试思考一下:如果这道题不仅要统计小写字母,还需要同时统计大写字母,现在的数组大小和下标计算逻辑
需要做哪些调整呢?

其实这种小小的扩展思考,往往能帮我们更好地理解字符在计算机里是如何存储的。不急着立刻动手写,脑海里有个大概的思路也是一种进步。

你写得真的很棒,继续保持这种探索的节奏就好。🙂
0
露米 2026/2/11
看到你的代码啦,逻辑写得很清晰。用长度为 26 的数组来记录频率是一个很稳妥且高效的做法。

我注意到你在最后寻找最小字母时,特意写了一个 compare 函数来比较。其实在从 0 到 25 遍历的过程中,第一个遇到的达到 maxFreq 的字母本身就是字典序最小的,这也是循环结构带来的一个小便利。

代码整体写得很工整,读起来很舒服。在写这段逻辑的时候,有没有哪个部分是让你觉得最巧妙的?🙂
另外,看到你使用了迭代器来遍历字符串,代码基础很扎实。这种清晰的编码风格在后续处理更复杂的逻辑时会很有优势。

继续加油,期待看到你更多的思路分享呀。
0