zoukankan      html  css  js  c++  java
  • HUST 1010 The Minimum Length (KMP 最短循环节)

    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
    
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    const int maxn=1000010;
    char t[maxn];
    int n[maxn];
    int len;
    void get_next()
    {
        int i=0;
        int j=-1;
        n[0]=-1;
        while(i<len)
        {
            if(j==-1||t[i]==t[j])
            {
                i++;
                j++;
                n[i]=j;
            }
            else
                j=n[j];
        }
    }
    int main()
    {
        while(scanf("%s",t)!=EOF)
        {
            int j,i;
            len=strlen(t);
            memset(n,0,sizeof(n));
            get_next();
           printf("%d
    ",len-n[len]);
        }
        return 0;
    }
  • 相关阅读:
    简单数学问题
    MFC 注册表编程
    Windows多线程端口扫描
    MFC Socket双向通信
    凯撒加密
    单片机滤波
    大数素性检验
    大数加法乘法
    Unsafe Code
    委托
  • 原文地址:https://www.cnblogs.com/tianmin123/p/4666863.html
Copyright © 2011-2022 走看看