hust——1010F - The Minimum Length(kmp专练)

来源:互联网 发布:python爬虫教程 pdf 编辑:程序博客网 时间:2024/06/06 01:25


F - The Minimum Length
Crawling in process... Crawling failedTime Limit:1000MS     Memory Limit:131072KB    64bit IO Format:%lld & %llu

HUST 1010





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<iostream>#include<string>#include<cstring>using namespace std;int nexta[1000010];void getnext(string s){int i=0,j=-1;nexta[0]=-1;while(i<s.size()){if(j==-1||s[i]==s[j]){++i;++j;nexta[i]=j;}else j=nexta[j];}}int main(){string s;long long n,k;while(cin>>s){getnext(s);k=s.size();n=k-nexta[k];//循环节cout<<n<<endl;}return 0;}


0 0