导航

KMP

Posted on 2016-03-13 17:21  tun~  阅读(140)  评论(0编辑  收藏  举报
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];
        }
    }
}