【KMP】 模板:next数组、封装kmp

来源:互联网 发布:如何提高集中力 知乎 编辑:程序博客网 时间:2024/05/22 06:49

代码:

int T[N],S[N];int nextt[N];int len1,len2;   //定义全局变量,void set_next(int *T,int *nextt)                     //next数组;{    int i,k=0;    nextt[0]=0;    for(i=1; i<len2; i++)    {//        int k=nextt[i-1];        while(k!=0&&T[i]!=T[k])            k=nextt[k-1];        if(T[i]==T[k])            k++;        nextt[i]=k;    }}int kmp(int *S,int *T,int *nextt)                           //封装kmp;{    int n,m;    int i,j=0;    n = len1;    m = len2;    set_next();    for (i = 0; i < n; ++i)    {        while(j > 0 && S[i] != T[j])            j = nextt[j-1];        if (S[i] == T[j])        {            j++;        }        if (j == m)        {            printf("%d\n",i-j+2);            return true;        }    }    return false;}


0 0
原创粉丝点击