题目

糖果
(candy.cpp/in/out 1s 256M)
小民是一个很喜欢吃糖果的小孩子,他给所有的糖果进行了分类,有A~Z一 共26种糖果,现在小民有一排糖果,小
民很奇怪,吃糖果只喜欢吃连续的若干个 ,并且不希望吃到相同分类的糖果。现在小民让你帮他计算一下L的最大
值,使得他的一排糖果中的任意连续L个糖果都不会有相同的分类。
Input
输入仅一行,一行由大写字母组成的字符串,代表小民的一排糖果。
Output
 输出仅一行,输出L的最大值。如果一排糖果都没有相同的,请输出-1。
Sample Input
ABABABABABAB
Sample Output
2
令字符串的长度为N ,1≤N≤10000000。

(弱鸡)的我连题目意思都没理解清楚,看来理解力得继续加强

题目大意:找出连续一段L,使在L内所有字母互不相同,并尽量使L最大。

code:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e7+1;
 4 char s[N];
 5 int n,ans,flag=1,vis[N];
 6 inline int read(){
 7     int x=0,f=1;char ch=getchar();
 8     while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
 9     while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
10     return x*f;
11 }
12 int main(){
13     scanf("%s",s+1);
14     n=strlen(s+1);
15     for(int i=1;i<=n;i++){
16         int u=s[i]-'A'+1;
17         if(vis[u]){
18             ans=min(ans,i-vis[u]);
19             flag=0;
20         }
21         if(flag){
22             ans++;
23         }
24         //cout<<"i= "<<i<<" vis[u]= "<<vis[u]<<" U= "<<u<<" flag= "<<flag<<" ans= "<<ans<<endl;
25         vis[u]=i;
26
27     }
28     if(ans==n){
29         printf("-1\n");
30     }
31     else{
32         printf("%d\n",ans);
33     }
34     return 0;
35 }
02-13 07:22