You are given a string s consisting of lowercase Latin letters. Character c is called k-dominant iff each substring of s with length at least k contains this character c.
You have to find minimum k such that there exists at least one k-dominant character.
Input
The first line contains string s consisting of lowercase Latin letters (1 ≤ |s| ≤ 100000).
Output
Print one number — the minimum value of k such that there exists at least one k-dominant character.
Example
Input
abacaba
Output
2
Input
zzzzz
Output
1
Input
abcde
Output
3
简单思维,线性扫一遍即可,从每个同种字符找最大的间距,然后再从这26个字母中找最小的。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
int index[27];
int v[27];
int main()
{
char s[100005];
scanf("%s",s);
int len=strlen(s);
memset(index,-1,sizeof(index));
for(int i=0;i<len;i++)
{
int now=s[i]-'a';
if(index[now]==-1)
{
index[now]=i;
v[now]=i+1;
//cout<<now<<" "<<v[now]<<endl;
}
else
{
v[now]=max(v[now],i-index[now]);
index[now]=i;
}
}
int ans=len;
for(int i=0;i<26;i++)
{
if(index[i]!=-1)
{
int temp=max(v[i],len-index[i]);
ans=min(temp,ans);
}
}
printf("%d\n",ans);
return 0;
}