28. Implement strStr()

2018-12-10  本文已影响0人  gpfworld

题目描述:

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。
内置函数的运行速度一般比我们写的函数,效率更高。内置函数一般都是经过优化的。所以在可以使用内置函数的情况下,不要自己实现。

上一篇下一篇

猜你喜欢

热点阅读