51nod-【1127 最短的包含字符串】

来源:互联网 发布:mac 命令行 u盘路径 编辑:程序博客网 时间:2024/05/21 18:49
1127 最短的包含字符串
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
 收藏
 关注
给出一个字符串,求该字符串的一个子串S,S包含A-Z中的全部字母,并且S是所有符合条件的子串中最短的,输出S的长度。如果给出的字符串中并不包括A-Z中的全部字母,则输出No Solution。
Input
第1行,1个字符串。字符串的长度 <= 100000。
Output
输出包含A-Z的最短子串长度。如果没有符合条件的子串,则输出No Solution。
Input示例
BVCABCDEFFGHIJKLMMNOPQRSTUVWXZYZZ
Output示例

28

#include<cstdio>#include<cstring>int get_min(int a,int b){if(a<b)return a;return b; } char s[110000];int num[110000]; int main(){scanf("%s",s);int len=strlen(s),i;memset(num,0,sizeof(num));int ans=len+1,j=0,sum=0;i=0;while(1){while(j<len&&sum<26){if(!num[s[j]]){++sum;num[s[j]]++; } elsenum[s[j]]++;++j; } if(sum<26)break;while(num[s[i]]!=1){num[s[i]]--;++i; }num[s[i]]-=1;--sum;ans=get_min(j-i,ans); i+=1;}if(ans<=len)printf("%d\n",ans);elseprintf("No Solution\n"); return 0;} 


0 0
原创粉丝点击