首页 > 其他 > 详细

最短的包含字符串 (尺取)

时间:2018-07-18 22:53:17      阅读:199      评论:0      收藏:0      [点我收藏+]

给出一个字符串,求该字符串的一个子串s,s包含A-Z中的全部字母,并且s是所有符合条件的子串中最短的,输出s的长度。如果给出的字符串中并不包括A-Z中的全部字母,则输出No Solution。

 

Input

第1行,1个字符串。字符串的长度 <= 100000。

Output

输出包含A-Z的最短子串s的长度。如果没有符合条件的子串,则输出No Solution。

Sample Input

BVCABCDEFFGHIJKLMMNOPQRSTUVWXZYZZ

Sample Output

28

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define inf 0x3f3f3f3f
 5 using namespace std;
 6 int main()
 7 {
 8     int i,len;
 9     char s[100010];
10     int vis[100010];
11     int r,l,sum,m;
12     memset(vis,0,sizeof(vis));
13     scanf("%s",s);
14     len=strlen(s);
15     memset(vis,0,sizeof(vis));
16     r=l=sum=0;
17     m=inf;
18     while(r<len||sum==26)
19     {
20         while(r<len&&sum<26)
21         {
22             if(vis[s[r]-A]==0)
23             {
24                 sum++;///记录出现的26个字母种类
25             }
26             vis[s[r]-A]++;///记录每一种出现的个数
27             r++;///右端点的扩张
28         }
29         if(sum==26)
30         {
31             m=min(m,r-l);
32         }
33         vis[s[l]-A]--;
34         if(vis[s[l]-A]==0)
35         {
36             sum--;
37         }
38         l++;///左端点的扩张
39     }
40     if(m!=inf)
41     {
42         printf("%d\n",m);
43     }
44     else
45     {
46         printf("No Solution\n");
47     }
48     return 0;
49 }

 



最短的包含字符串 (尺取)

原文:https://www.cnblogs.com/wkfvawl/p/9332722.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!