CodeForces - 888C——K-Dominant Character(思维题)
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.
Examples
Input
abacaba
Output
2
Input
zzzzz
Output
1
Input
abcde
Output
3
题解:
找相同字符最大间距的最小值。
(还要注意 每种字符的第一个与字符串左端点的的距离 和 每种字符的最后一个与右端点的距离)
代码:
#include <bits/stdc++.h>
using namespace std;
char S[100005];
int First[27];//记录每种字符在字符串中的第一个字符的下标,没有是-1。
int main(){
scanf("%s",S);
int len = strlen(S);
memset(First,-1,sizeof(First));
int mid;
for(int i=0 ; i<len ; i++){
mid = S[i]-'a';
if(First[mid] == -1)First[mid] = i;
}
int Minn = 0x3f3f3f3f;
int Maxn;
for(int i=0 ; i<26 ; i++){
if(First[i] == -1)continue;
Maxn = First[i]+1;
int last = First[i];
for(int j=First[i]+1 ; j<len ; j++){
if(S[j] == S[last]){
if(j-last>Maxn)Maxn = j-last;
last = j;
}
}
if(len-last>Maxn)Maxn = len-last;
if(Maxn<Minn)Minn = Maxn;
}
printf("%d\n",Minn);
return 0;
}