KMP模板

struct KMP {
    void print() {

    }
    void GetFail(char *P,int *f) {
        int m=strlen(P);
        f[0]=f[1]=0;
        for(int i=1; i<m; i++) {
            int j=f[i];
            while(j&&P[i]!=P[j])
                j=f[j];
            f[i+1]=P[i]==P[j]?j+1:0;
        }
    }
    void Find(char *T,char *P,int *f) {
        int n=strlen(T),m=strlen(P);
        GetFail(P,f);
        for(int i=1; i<m; i++) {
            int j=f[i];
            while(j&&P[i]!=P[j]) j=f[j];
            if(P[j]==P[i]) j++;
            if(j==m) print();//找到了
        }
    }
};

 

posted on 2019-02-11 21:49  欣崽  阅读(156)  评论(0编辑  收藏  举报

导航