题目:http://poj.org/problem?id=2406
分析:kmp next数组的应用.如果是周期串,则len%(len-next[len])==0,且len/(len-next[len])即为周期.
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int Tmax=1000005;
char s[Tmax];
int len,f[Tmax];
void getfail()
{
int i=0,j=-1;
f[0]=-1;
while(i<len)
{
if(j==-1||s[i]==s[j])
{
i++;
j++;
f[i]=j;
}
else j=f[j];
}
return;
}
int main()
{
while(scanf("%s",s)&&s[0]!='.')
{
len=strlen(s);
getfail();
if(len%(len-f[len])==0) printf("%d\n",len/(len-f[len]));
else printf("1\n");
}
return 0;
}