KMP

int next[MAXN];
char moshi[MAXN];
char mubiao[MAXN];
int num;//目标串中模式串的个数
void KMP(){
    next[0]=-1;
    for(int j=0,k=-1;j<strlen(moshi)-1;){
        if(k==-1||moshi[j]==moshi[k]){
            next[++j]=++k;
        }
        else{
            k=next[k];
        }
    }
    for(int i=0,j=0;i<strlen(mubiao);){
        if(j==-1||mubiao[i]==moshi[j]){
            i++;
            j++;
        }
        else{
            j=next[j];
        }
        if(j==strlen(moshi)){
            num++;
            i--;
            j=next[j-1];
        }
    }
}
原文地址:https://www.cnblogs.com/tun117/p/5272528.html