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

 

 

 

 

 

posted @ 2019-02-24 23:09  YFR718  阅读(111)  评论(0编辑  收藏  举报