zoukankan      html  css  js  c++  java
  • 最短的包含字符串 (尺取)

    给出一个字符串,求该字符串的一个子串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
    ",m);
    43     }
    44     else
    45     {
    46         printf("No Solution
    ");
    47     }
    48     return 0;
    49 }


  • 相关阅读:
    离线安装MariaDB 10.4.13
    YUM 的使用
    Crontab 定时任务
    静默安装卸载 ORACLE
    java 改变图片的DPI
    Java TIF、JPG、PNG等图片转换
    key可重复的Map
    集合对象去重
    Java创建TXT文件并写入 内容
    Java已知图片路径下载图片到本地
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9332722.html
Copyright © 2011-2022 走看看