struct KMP { void print() { } void GetFail(char *P,int *f) { int m=strlen(P); f[0]=f[1]=0; for(int i=1; i<m; i++) { int j=f[i]; while(j&&P[i]!=P[j]) j=f[j]; f[i+1]=P[i]==P[j]?j+1:0; } } void Find(char *T,char *P,int *f) { int n=strlen(T),m=strlen(P); GetFail(P,f); for(int i=1; i<m; i++) { int j=f[i]; while(j&&P[i]!=P[j]) j=f[j]; if(P[j]==P[i]) j++; if(j==m) print();//找到了 } } };
原文:https://www.cnblogs.com/033000-/p/10363309.html