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 formedby 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.
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.
An integer denoting the smallest period of the input string for each input. Two consecutive output are
separated by a blank line.
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;
}