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;
}

原文地址:https://www.cnblogs.com/yfr2zaz/p/10428619.html