//分析到关键点,长度为k的所有子串必须包含的那个字符,那个字符在串中的距离<=k(在第一位置和最后位置需注意特判)
#include<bits/stdc++.h>
using namespace std;
char str[100100];
int len;
int jud(int k)
{
for(char i='a';i<='z';i++)
{
int pre=-1,flag=1;//小心=-1 恶心点
for(int j=0;j<len;j++)
{
if(str[j]==i)
{
if(j-pre>k) {flag=0;break;}
pre=j;
}
}
if(len-1-pre>=k) flag=0;//小心>= 恶心点
if(flag) {return 1;}
}
return 0;
}
int main()
{
scanf("%s",str);
len=strlen(str);
int l=1,r=len,ans=len;
while(l<=r)
{
int mid=(l+r)/2;
if(jud(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d\n",ans);
return 0;
}
二分
最新推荐文章于 2024-04-29 23:51:10 发布