讨论/技术交流/数组蜜汁溢出,力扣运行程序隔山打牛?/
数组蜜汁溢出,力扣运行程序隔山打牛?

image.png真是服了,这不通过,凭啥啊?
这是没通过(溢出了)的:

class Solution {
public:
int lengthOfLastWord(string s) {
if(s.size()==0) return 0;
int answer=0,i=s.size()-1;
while(s[i]==' '&&i>0) i--;
if(i<0) return 0;//这句话换成 if(s[i]==' ') return 0; 就过了……难不成还跳过我这句话去运行下面的?
for(;i>=0;i--){
if(s[i]==' ') break;
answer++;
}
return answer;
}
};

5
共 3 个回复

有种功能叫做调试

2

我刚刚运行了一下,if(i<0) return 0;if(s[i]==' ') return 0; 都可以运行通过啊。

这是我运行通过的两版代码:

代码 1:

#include <iostream>
#include <string>

using namespace std;

class Solution {
public:
    int lengthOfLastWord(string s) {
        if (s.size() == 0) {
            return 0;
        }
        int answer = 0;
        int i = s.size() - 1;
        while (s[i] == ' ' && i > 0) {
            i--;
        }

        //这句话换成 就过了……难不成还跳过我这句话去运行下面的?
//        if (i < 0) {
//            return 0;
//        }
        if (s[i] == ' ') {
            return 0;
        }

        for (; i >= 0; i--) {
            if (s[i] == ' ') {
                break;
            }
            answer++;
        }
        return answer;
    }
};

代码 2:

#include <iostream>
#include <string>

using namespace std;

class Solution {
public:
    int lengthOfLastWord(string s) {
        if (s.size() == 0) {
            return 0;
        }
        int answer = 0;
        int i = s.size() - 1;
        while (s[i] == ' ' && i > 0) {
            i--;
        }

        //这句话换成 if(s[i]==' ') return 0; 就过了……难不成还跳过我这句话去运行下面的?
        if (i < 0) {
            return 0;
        }
        for (; i >= 0; i--) {
            if (s[i] == ' ') {
                break;
            }
            answer++;
        }
        return answer;
    }
};
1

首先你可能是复制了通过了的代码

其次 你的循环 while(s[i]==' '&&i>0) i--;
这个循环结束后 i的值最小为 0, 所以下方的 if(i < 0)条件永远为假 (就是你所谓的隔山打牛)