思考:
首先拿到这道题是很懵的,如图所示:
![](https://img-blog.csdnimg.cn/c499ca1004974aac807b42151a6d6f6a.png)
后来冷静下来思考了一番,用一个样例推出了规律:
只需要找到这个字符串的“平衡点”,让它趋近于“平均”地分为几部分,找到的字母分割出来的连通块最大情况就是答案了
AC代码如下:
#include<bits/stdc++.h>
using namespace std;
string a;
//define
int main(){
cin>>a;
int n=a.size();
int ans=1000000;
for(int i=0;i<26;i++){
char c='a'+i;
int cnt=0;
int mx=0;
for(int j=0;j<n;j++){
if(a[j]==c){
mx=max(mx,cnt),cnt=0;
}else{
cnt++;
}
}
mx=max(mx,cnt);
ans=min(ans,mx);
}
cout<<ans;
return 0;
}
主打一个6
反思总结&拓展延伸:
主要先不要怕,试试再说,说不定就一定能试出结果或者有个粗略的判断
拓展思考:如果要求没k个字母相同,又该如何解决呢?
![思考](https://img-blog.csdnimg.cn/4ca51c85f77e4b668915b04cff1be949.png)