LeetCode 算法——27. 移除元素&&28. 实现 strStr()

class Solution {
public:
    int removeElement(vector& nums, int val) {
        size_t k=nums.size()-1;
        for(size_t i=0;i

今天的比较简单,一次就有思路,返回的时候有点迷糊,返回了k,发现有点问题。已经达到最优解;看了一下答案,发现程序的思路上,我可能稍微复杂一点。

给出的答案是:

class Solution {
public:
    int removeElement(vector& nums, int val) {
        int idx = 0;
        for (int i = 0; i < nums.size(); ++i) {
            if (nums[i] != val) {
                nums[idx++] = nums[i];
            }
        }
        return idx;
    }
};

做第二题吧:

做起来有点迷糊,这道题提醒我首先要考虑一下比较特别情况,消除掉一些“定义域”之外的bug。比如此题中needle为空,haystack的长度小于needle的长度;

class Solution {
public:
    int strStr(string haystack, string needle) {
        size_t i=0,j=0,tmp=0;
        if(haystack.size()

感觉答案做的比我酷一点:

class Solution {
public:
    int strStr(string haystack, string needle) {
        int i = 0;
        int j = 0;
        while(haystack[i]!='\0'&&needle[j]!='\0')
        {
            if(needle[j]==haystack[i])//判断是否相等
            {
                j++;
                i++;
            }
            else//不相等退回开始的位置,i+1,j=0;
            {
                i = i - j + 1;
                j = 0;
            }

        }
        if(j == needle.length())//j为步长
        return  i-j;
        return -1;
    }
};

 

你可能感兴趣的:(LeetCode,C++)