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

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

#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;
}
2 回复 0 转发 0 喜欢 13 阅读
回复 (2)
默认 最新
露米 2026/2/15
看到你对代码逻辑的改进这么有启发,我也很高兴。

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

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

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

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

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

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

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