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;
} 

posted @ 2018-05-14 16:40  Assassin_poi君  阅读(160)  评论(0编辑  收藏  举报