您的位置:首页 > 其它

LeetCode刷题笔记三

2017-02-23 10:47 99 查看
28. Implement strStr()

Description:

Implement strStr().

Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

算法:KMP算法

参考资料:http://blog.csdn.net/yutianzuijin/article/details/11954939/

代码:

class Solution {

public:

    int strStr(string haystack, string needle) 

    {

        int len1=haystack.size(), len2=needle.size();

        if(len1 < len2)

        {

            return -1;

        }

        if(len1==0 && len2==0)

        {

            return 0;

        }

        if(len2==0)

        {

            return 0;

        }

        int i, j;

        int *next = new int[len2+1]; //next[i]表示needle前i个元素中前缀和后缀的最大公共长度

        next[0] = 0;

        next[1] = 0;

        for(i=1; i<len2; ++i)

        {

            j = next[i];

            while(j>0 && needle[i] != needle[j])

            {

                j=next[j];

            }

            if(needle[i] == needle[j])

            {

                ++j;

            }

            next[i+1] = j;

        }

        for(i=0, j=0; i<len1; ++i)

        {

            while(j>0 && haystack[i] != needle[j])

            {

                j = next[j];

            }

            if(haystack[i] == needle[j])

            {

                j += 1;

            }

            if(j == len2)

            {

                delete [] next;

                return i-j+1;

            }

        }

        // for(i=0, j=0; i<=len1-len2;)

        // {

        //     while(j<len2 && haystack[i+j] == needle[j])

        //     {

        //         ++j;

        //     }

        //     if(j == len2)

        //     {

        //         delete [] next;

        //         return i;

        //     }

        //     else

        //     {

        //         i += j-next[j];

        //         j = 0;

        //     }

        // }

        delete [] next;

        return -1;

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: