hdu-1358 kmp,next数组的应用

来源:互联网 发布:ubuntu 邮件 编辑:程序博客网 时间:2024/06/05 08:14
一个长度为 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)));}elsej=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; } 

原创粉丝点击