KMP的第一题,以前数据结构课上学过KMP,现在对其实现和其中一些规律加深了理解
#include<stdio.h> char s[1000005]; int next[1000005]; int n; void get_next(){ int i,j; j=next[0]=-1; i=0; while(i<n){ while(j!=-1 && s[j]!=s[i]) j=next[j]; next[++i]=++j; } } int main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif // ONLINE_JUDGE int cas=0; while(scanf("%d",&n),n){ printf("Test case #%d\n",++cas); scanf("%s",s); get_next(); int j; for(int i=2;i<=n;i++){//这里的i是表长度,不是指针 j=i-next[i]; if(i%j==0&&i/j>1) printf("%d %d\n",i,i/j); } printf("\n"); } return 0; }
原文:http://blog.csdn.net/lj94093/article/details/44700333