雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

KMP的next函数——BZOJ1355

Posted on 2012-02-04 10:40  huhuuu  阅读(980)  评论(0编辑  收藏  举报

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

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]);
}
}