51nod 1127 最短的包含字符串

来源:互联网 发布:centos 时区设置 编辑:程序博客网 时间:2024/06/14 17:00

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 <bits/stdc++.h>using namespace std;char str[100005];int sum[30];int main(){    scanf("%s",str);    int len=strlen(str);    for(int i=0;i<len;i++)    {        sum[str[i]-'A']++;    }    for(int i=0;i<26;i++)    {        if(!sum[i])        {            puts("No Solution");            return 0;        }    }    memset(sum,0,sizeof(sum));    int l=0,r=0,cnt=0;    int Min=INT_MAX;    while(r<len)    {        while(cnt<26&&r<len)        {            if(!sum[str[r]-'A'])            {                cnt++;            }            sum[str[r]-'A']++;            r++;        }        while(sum[str[l]-'A']>1)        {            sum[str[l]-'A']--;            l++;        }        if(cnt==26)        {            Min=min(Min,r-l);        }        cnt--;        sum[str[l++]-'A']--;    }    printf("%d\n",Min);    return 0;}
原创粉丝点击