美文网首页
28. Implement strStr()

28. Implement strStr()

作者: gpfworld | 来源:发表于2018-12-10 10:55 被阅读0次

    题目描述:

    https://leetcode.com/problems/implement-strstr/

    解决方案:

    class Solution {
    public:
        int strStr(string haystack, string needle) {
            if (needle.empty()) return 0;
            if (haystack.size() < needle.size()) return -1;
            if (haystack.size() == needle.size()) return  haystack == needle ? 0 : -1;
            for (int i = 0; i < haystack.size(); i++) {
                if (haystack[i] == needle[0]) {
                    int j = 1;
                    for (; j < needle.size(); j++) {
                        if (haystack[i + j] != needle[j])
                            break;
                    }
                    if (j == needle.size())
                        return i;
                }
            }
            return -1;
        }
    };
    

    mycode(c++):

    class Solution {
    public:
        int strStr(string haystack, string needle) {
            if (needle.empty())
                return 0;
            if (haystack.size() < needle.size()) return -1;
            if (haystack.size() == needle.size()) return  haystack == needle ? 0 : -1;
            for( int i = 0;i< haystack.length();i++){
                int j = 0;
                int k = i;
                while(j<needle.length() && k < haystack.length() &&haystack[k]==needle[j]){
                    j++;
                    k++;
                }
                if( j == needle.length())
                    return i;
            }
            return -1;
        }
    };
    

    心得:

    代码优化,速度的提升。此算法是经典模式匹配算法KMP
    把代码中最特殊的情况提取出来,省去不必要的操作。
    比如这里的

    if (haystack.size() < needle.size()) return -1;
    if (haystack.size() == needle.size()) return  haystack == needle ? 0 : -1;
    

    增加这两个判断,代码运行是见从512ms,下降到8ms。
    还有就是字符串的判断操作,一般情况下,如果可以使用内置的函数,就不要自己手动去判断。比如

    if (needle == "")  return 0;
    

    替换为

    if (needle.empty())   return 0;
    

    运行速度从8ms下降为4ms。
    内置函数的运行速度一般比我们写的函数,效率更高。内置函数一般都是经过优化的。所以在可以使用内置函数的情况下,不要自己实现。

    相关文章

      网友评论

          本文标题:28. Implement strStr()

          本文链接:https://www.haomeiwen.com/subject/fthrhqtx.html