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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值