首页 > 其他 > 详细

KMP

时间:2020-05-19 21:49:28      阅读:40      评论:0      收藏:0      [点我收藏+]
int * CreateNextArray(char *str2,int nlen2)
{
    int * next=(int *)malloc(sizeof(int)*nlen2);
    next[0]=-1;
    if(nlen2==1)
    {
        return next;
    }

    next[1]=0;
    int i=2;
    int cn=0;
    while(i<nlen2)
    {
        if(str2[i-1] == str2[cn])
        {
            next[i++]=++cn;
        }
        else if(cn>0)
        {
            cn=next[cn];
        }
        else
        {
            next[i++]=0;
        }
    }
    return next;
}



int KMP(char *str1,int nlen1,char *str2,int nlen2)
{
    if(nlen2>nlen1 || nlen1<=0 || nlen2 <=0) return -1;

    int *next=CreateNextArray(str2,nlen2);
    // for(int i=0;i<nlen2;i++)
    // {
    //     cout<<next[i]<<" ";
    // }
    cout<<endl;
    int i=0;
    int j=0;
    while(i<nlen1 && j<nlen2)
    {
        if(str1[i] == str2[j])
        {
            i++;
            j++;
        }
        else if(next[j]<0)
        {
            i++;
        }
        else
        {
            j=next[j];
        }
    }

    // cout<<i <<" "<<j<<endl;
    return j==nlen2 ? i-j:-1;

}

 

KMP

原文:https://www.cnblogs.com/RainzzZ/p/12919411.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!