题目链接:http://poj.org/problem?id=2406
题目要求:求出字符串S的子串a出现的次数n,其中S=a^n,输出n.
代码:
#include<stdio.h>
#include<string.h>
char S[1000001];
int next[1000001];
void main(){
int i,j,len,ans;
while(scanf("%s",S)!=EOF && (S[0]!='.'))
{
i=0;
j=-1;
next[0]=-1;
len=strlen(S);
while(i<=len)
{
if(j==-1 || S[i]==S[j])
{
++i;++j;
if(S[i]!=S[j])
next[i]=j;
else
next[i]=next[j];
}
else
j=next[j];
}
i=len-next[len];
if(len%i==0)
ans=len/i;
else
ans=1;
printf("%d\n",ans);
}
}