KMP的next函数——BZOJ1355

给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少

Sample Input

8
cabcabca

Sample Output

3

用到了kmp里的next自身匹配
View Code
#include<stdio.h>
#include<math.h>

char ss[1000009];
int next[1000009];

void getnext(char *s,int next[])
{
int i,j;
i=0;j=-1;
next[0]=-1;
while(s[i])
{
if(j == -1||s[i]==s[j])
{
++i;++j;next[i]=j;
}else
j=next[j];
}
}

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",ss);
getnext(ss,next);
int i;
//for(i=1;i<=n;i++)
// printf("%d ",next[i]);
printf("%d\n",n-next[n]);
}
}
原文地址:https://www.cnblogs.com/huhuuu/p/2337784.html