首页 > 其他 > 详细

leetcode 28(简单kmp)

时间:2020-03-09 18:52:39      阅读:67      评论:0      收藏:0      [点我收藏+]
void GetNext(string &needle,int next[])
    {
        next[0]=-1;
        int k=-1;
        int len=needle.size();
        for(int i=1;i<len;i++)
        {
            while(k!=-1&&needle[k+1]!=needle[i])
                k=next[k];
            if(needle[k+1]==needle[i])
            {
                k++;
            }
            next[i]=k;
        }
    }
    
    int strStr(string haystack, string needle) {
        int nlen=needle.size();
        int hlen=haystack.size();
        if(nlen==0)
            return 0;
        if(hlen==0)
            return -1;
        int *next=new int[nlen];
        GetNext(needle,next);
        int k=-1;
        for(int i=0;i<hlen;i++)
        {
            while(k!=-1&&needle[k+1]!=haystack[i])
                k=next[k];
            if(needle[k+1]==haystack[i])
            {
                k++;
                if(k==nlen-1)
                    return i-k;
            }
        }
        return -1;
    }

 

leetcode 28(简单kmp)

原文:https://www.cnblogs.com/QingFengDaHui/p/12450218.html

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