您的位置:首页 > 其它

hdu-1358 kmp,next数组的应用

2017-08-15 11:20 369 查看
一个长度为 n 的字符串,求该字符串的循环前缀的长度,和循环次数
#include<stdio.h>
#include<string.h>
int n;
int next[1200000];
char s[1200000];
void getnext()
{
int i,j;
i=0;
j=-1;
next[0]=-1;
while(i<n)
{
if(j==-1||s[i]==s[j])
{
next[++i]=++j;
if(i%(i-j)==0&&i/(i-j)>1)
printf("%d %d\n",i,(i/(i-j)));
}
else
j=next[j];
}
}
int main(void)
{
int m=1;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
getchar();
for(int i=0;i<n;i++)
scanf("%c",&s[i]);
printf("Test case #%d\n",m++);
getnext();
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: