zoukankan      html  css  js  c++  java
  • hust--------The Minimum Length (最短循环节)(kmp)

    F - The Minimum Length
    Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu
    Submit Status

    Description

    There is a string A. The length of A is less than 1,000,000. I rewrite it again and again. Then I got a new string: AAAAAA...... Now I cut it from two different position and get a new string B. Then, give you the string B, can you tell me the length of the shortest possible string A. For example, A="abcdefg". I got abcd efgabcdefgabcdefgabcdefg.... Then I cut the red part: efgabcdefgabcde as string B. From B, you should find out the shortest A.

    Input

    Multiply Test Cases. For each line there is a string B which contains only lowercase and uppercase charactors. The length of B is no more than 1,000,000.

    Output

    For each line, output an integer, as described above.

    Sample Input

    bcabcab
    efgabcdefgabcde
    

    Sample Output

    3
    7

    代码:
     1     #include<iostream>
     2     #include<cstring>
     3     #include<cstdlib>
     4     #include<cstdio>
     5     using namespace std;
     6     const int maxn=1000050;
     7     int next[maxn];
     8     char str[maxn];
     9     int main()
    10     {
    11       int i,j;
    12       while(scanf("%s",str)!=EOF)
    13       {
    14           j=-1;
    15           i=0;
    16           next[i]=-1;
    17           int len=strlen(str);
    18           while(i<len)
    19           {
    20               if(j==-1||str[i]==str[j])
    21               {
    22                   i++;
    23                   j++;
    24                  if(str[i]==str[j])
    25                       next[i]=next[j];
    26                  else next[i]=j;
    27               }
    28               else j=next[j];
    29           }
    30           //得到最大回缩长度(即最小循环长度;
    31          int cir_len=len-next[len];
    32           printf("%d
    ",cir_len);
    33       }
    34         return 0;
    35     }
    View Code


  • 相关阅读:
    mysql分组排序取组内第一的数据行
    C#版Nebula客户端编译
    关于nginx
    http状态码
    gitlab
    TCP/IP 3次握手和四次断开
    nps 内网穿透
    用CentOS7做一个简单的路由器
    linux 简单特效
    LVS粗讲
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3878158.html
Copyright © 2011-2022 走看看