KMP算法
void kmp_pre(char x[],int m,int next[]){ int i=0,j; j=next[0]=-1; while(i<m){ while(-1!=j&&x[i]!=x[j]) j=next[j]; next[++i]=++j; } } int next[10010];//x是模式串,y是主串 int kmp_count(char x[],int m,char y[],int n){ int i=0,j=0,ans=0; kmp_pre(x,m,next); while(i<n){ while(-1!=j&&y[i]!=x[j]) j=next[j]; i++;j++; if(j>=m){ ans++; j=next[j]; } } return ans; }