Uva 455 Periodic Strings

来源:互联网 发布:奶奶抱走红网络 编辑:程序博客网 时间:2024/05/16 03:27

 

A character string is said to have period k if it can be formed by concatenating one or more repetitions

of another string of length k. For example, the string ”abcabcabcabc” has period 3, since it is formed
by 4 repetitions of the string ”abc”. It also has periods 6 (two repetitions of ”abcabc”) and 12 (one
repetition of ”abcabcabcabc”).

Write a program to read a character string and determine its smallest period.


Input
The first line oif the input file will contain a single integer N indicating how many test case that your
program will test followed by a blank line. Each test case will contain a single character string of up

to 80 non-blank characters. Two consecutive input will separated by a blank line.


Output
An integer denoting the smallest period of the input string for each input. Two consecutive output are

separated by a blank line.


Sample Input
1
HoHoHo
Sample Output

2


AC代码:

#include<cstdio>#include<cstring>char str[1111];int ne[1111];void Get_ne(char *str,int len){int i=0,j=-1; ne[0]=-1;while(i<len) {if(j==-1||str[i]==str[j]) ne[++i]=++j;else j=ne[j];}}int main(){    int T;scanf("%d",&T);while(T--) {scanf("%s",str);int len=strlen(str);Get_ne(str,len);printf("%d\n",len%(len-ne[len])==0?(len-ne[len]):len);    if(T) putchar('\n');      }     return 0;} 


0 0