kmp模板

来源:互联网 发布:cad绘图软件 编辑:程序博客网 时间:2024/06/10 04:36
void makenext(const char *p , int *next){    int i=1,k=0;    int m = strlen(p);    next[0] = 0;    for(i=1,k=0; i<m; i++)    {        while(k>0 && p[i]!=p[k])            k = next[k-1];        if(p[i] == p[k])        {            k++;        }        next[i] = k;    }}int kmp(const char *T , const char *p, int *next){    int m1 = strlen(T);    int m2 = strlen(p);    int i,k,ans = 0;    makenext(p,next);    for(i=0,k=0; i<m1; i++)    {        while(k>0 && T[i]!=p[k])            k = next[k-1];        if(T[i] == p[k])            k++;        if(k == m2)          return true;    }    return false;}
0 0