Problem Description
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
2input
zzzzz
output
1input
abcde
output3
题意:给定一个小写字母组成的字符串,解出一个数字k,要求这个数字k满足:任取这个字符串长度为k的连续子串,子串中都含有字母c,其中字母c属于输入的字符串,且数字k最小。
#include <bits/stdc++.h> using namespace std; char a[100005]; int interval[30],last[30]; //一个用来存储相同子母见的最大间隔,另一个用来存储某个字母上次出现的位置 bool cmp(int a,int b) { return a<b; } int main() { scanf("%s",a); int c=strlen(a),i; memset(last,-1,sizeof(last)); for(i=0; i<c; i++) { interval[a[i]-'a']=max(interval[a[i]-'a'],i-last[a[i]-'a']); last[a[i]-'a']=i; } for(i=0; i<26 ;i++) { interval[i]=max(interval[i],c-last[i]); } sort(interval,interval+26,cmp); cout<<interval[0]; return 0; }