标签:
#include<stdio.h> #include<string.h> const int N=1e6+11; int next[N]; void getnext(char *s){ next[0]=0; for(int i=1,j=0;s[i];i++){//j为next[i-1] while(j>0&&s[i]!=s[j]){ j=next[j-1]; } if(s[i]==s[j]) j++; next[i]=j; } } int KMP(char *O,char *F){ int n=strlen(O),m=strlen(F); int i,j,ans=0; getnext(F); for(i=0,j=0;i<n;i++){ while(j>0&&O[i]!=F[j]){ j=next[j-1]; } if(O[i]==F[j]) ++j; if(j==m) ans++; } return ans; }
标签:
原文地址:http://www.cnblogs.com/L-King/p/5700680.html