最长的回文:我的程序在leetcode中得到运行时错误,但它在我的笔记本电脑上返回正确的答案

时间:2016-03-01 13:58:35

标签: c++ algorithm

我的节目如下:

string longestPalindrome(string s) {
if(s.size() <=1 )
    return s;
bool isPalindrome[s.size()][s.size()];
for( int i=0; i < s.size(); ++i ){
    isPalindrome[i][i]=true;
    isPalindrome[i+1][i]=true;
}
int longestPalindromeLength=0;
int startIndex=0;
for( int i=2; i<= s.size(); ++i){//子串长度
    for( int j=0; j <=s.size()-i;++j ){//每个起始位置
        int k=j+i-1;
        if( s[j]==s[k] ){
            if(isPalindrome[j+1][k-1]== true){
                isPalindrome[j][k]=true;
                if( i > longestPalindromeLength ){
                    longestPalindromeLength=i;
                    startIndex=j;
                }
            }else{
                isPalindrome[j][k]=false;
            }
        }else{
            isPalindrome[j][k]=false;
        }
    }
}
return s.substr(startIndex,longestPalindromeLength);

}

测试用例是:

  

azwdzwmwcqzgcobeeiphemqbjtxzwkhiqpbrprocbppbxrnsxnwgikiaqutwpftbiinlnpyqstkiqzbggcsdzzjbrkfmhgtnbujzszxsycmvipjtktpebaafycngqasbbhxaeawwmkjcziybxowkaibqnndcjbsoehtamhspnidjylyisiaewmypfyiqtwlmejkpzlieolfdjnxntonnzfgcqlcfpoxcwqctalwrgwhvqvtrpwemxhirpgizjffqgntsmvzldpjfijdncexbwtxnmbnoykxshkqbounzrewkpqjxocvaufnhunsmsazgibxedtopnccriwcfzeomsrrangufkjfzipkmwfbmkarnyyrgdsooosgqlkzvorrrsaveuoxjeajvbdpgxlcrtqomliphnlehgrzgwujogxteyulphhuhwyoyvcxqatfkboahfqhjgujcaapoyqtsdqfwnijlkknuralezqmcryvkankszmzpgqutojoyzsnyfwsyeqqzrlhzbc

当我在leetcode中运行上面的代码时,它会给出运行时错误。但是当我在笔记本电脑上测试时,它会给出正确的答案:"sooos"

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

您可能会收到运行时错误,因为此leetcode是一个资源有限的环境,而您的笔记本电脑却没有。您的实现使用O(N ^ 2)内存,环境不允许这样做。

这个经典问题有更有效的解决方案,你应该改变你的方法。

答案 1 :(得分:0)

  1. &#34; bool isPalindrome [s.size()] [s.size()];&#34;不允许在堆栈上定义一个数组,该数组将在运行时定义。
  2. 也许leetcode接受数组。但是以下循环将真实写入位置,这些位置超出了数组的范围。