我的节目如下:
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"
我的代码出了什么问题?
答案 0 :(得分:0)
您可能会收到运行时错误,因为此leetcode是一个资源有限的环境,而您的笔记本电脑却没有。您的实现使用O(N ^ 2)内存,环境不允许这样做。
这个经典问题有更有效的解决方案,你应该改变你的方法。
答案 1 :(得分:0)