题目链接:http://poj.org/problem?id=2406
题目大意:输入一个字符串s,找到最大的n使s=a^n,a可为任意字符串
其中 若 a = "abc" , b = "def" 则 a*b = "abcdef".
next[i]表示前i-1字符的前缀后缀最大公共元素长度,所以i失配跳转到next[i]
模式串 a b a b a b a b
i= 0 1 2 3 4 5 6 7 8
next[i]= -1 0 0 1 2 3 4 5 6
所以若len%(len-next[len])==0
重复次数=len/(len-next[len])
若len%(len-next[len])!=0
重复次数=1
#include<cstdio>
#include<cstring>
char str[1000100];
int next[1000100];
void get_next(int len){
int i=0,j=-1;
next[0]=-1;
while(i<len){
if(j==-1||str[i]==str[j]){
i++,j++;
next[i]=j;
}else
j=next[j];
}
}
int main(){
int i,ans;
while(scanf("%s",str)&&str[0]!='.'){
int len=strlen(str);
get_next(len);
printf("%d\n",(len%(len-next[len]))?1:len/(len-next[len]));
}
return 0;
}