讨论/题目交流/同样输入,执行正确,提交报错,为什么啊?/
同样输入,执行正确,提交报错,为什么啊?

做第5题:最长回文子串时,同样是输入"cbbd",执行时正确,提交时就报错,为什么啊?

捕获.PNG

以下是源代码:

class Solution {
public:
    string longestPalindrome(string s) {
        int n=s.size(),i,j,m;
        string s1;
        for(m=n-1;m>=0;m--){
            for(i=0;i+m<=n-1;i++){
                for(j=0;i+j<i+m-j;j++){
                    if(s[i+j]!=s[i+m-j])
                    break;
                }
                if(i+j>=i+m-j){
                    for(j=0;j<=m;j++)
                        s1[j]=s[i+j];
                    break;
                }
            }
            if(j>m)
            break;
        }
       return s1;
    }
};
展开讨论
string longestPalindrome(string s)
{
	int n = s.size(), i, j, m;
	string s1;
	for (m = n - 1; m >= 0; m--) 
	{
		for (i = 0; i + m <= n - 1; i++) 
		{
			for (j = 0; i + j < i + m - j; j++) 
			{
				if (s[i + j] != s[i + m - j])
				{
					break;
				}
			}
			if (i + j >= i + m - j)
			{
				for (j = 0; j <= m; j++)
				{
					s1 += s[i + j];
				}
				break;
			}
		}
		if (j > m) break;
	}
	return s1;
}

s1没有初始值,没有设定s1长度就是用[]访问,s1[j]=s[i+j]导致出现问题。
会出现string subscript out of range的错误。
可以使用s1 += s[i + j]s1.push_back(s[i + j])

leetcode里不太清楚,看情形是指向了一个地址,没有清空数据,所以多个用例时,前一个数据更长,就会遗留下来。

初始化变量很重要,可以规避很多坑。

展开全部 5 讨论