LeetCode 28 Implement strStr()

题目

实现一个字符串 indexOf()的功能。class Solution {
public:
int next[100005];
int strStr(string haystack, string needle) {

    if(needle=="")
        return 0;
    return KMP(haystack,needle);
    
}

int KMP(string content,string str)
{
    getNext(str);
    
    int i=0,j=0;
    while(i<content.length()&&j<str.length())
    {
        if (j==0 ||content[i]==str[j])
        {
            if(content[i]==str[j])
                j++;
            i++;
        }
        else
        {
                j=next[j-1];
        }
    }
    
    if(j>=str.length())
    {
        return i-str.length();
    }
    else
        return -1;
}

void getNext(string str)
{
    next[0]=0;
    for(int i=1;i<str.length();i++)
    {
        int k=next[i-1];
        while(k!=0&&str[i]!=str[k])
        {
            k=next[k-1];
        }
        
        
        if(str[i]==str[k])
            next[i]=k+1;
        else
            next[i]=0;
        
    }
}

};

把看毛片算法又温习了一遍。KMP faster than 94% c++ submissions.


posted @ 2019-07-13 09:54  Shendu.CC  阅读(82)  评论(0编辑  收藏  举报