给你一个字符串,它是由某个字符串不断自我连接形成的。 但是这个字符串是不确定的,现在只想知道它的最短长度是多少
Sample Input
8
cabcabca
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]);
}
}