next 要注意:
数组是从0到i-1的而不是1到i;
所以next[i]其实是0到i-1的前缀和后缀相同的最大个数
如此的话但长度为1的时候其实是没有意义的,所以一般设next[0]=-1;
void getnext(int str[],int next[],int len)
{
int i=0;
int j=-1;
next[0]=-1;
while(i<len)
{
if(j==-1||str[i]==str[j])
{
i++;
j++;
next[i]=j;
}
else
{
j=next[j];
}
}
}
当满足if(i%(i-next[i])==0&&next[i]!=0)
有循环节
循环节长度为:i - next[i]
循环次数为:i / ( i - next[i] )