使用expandfromcenter方法的最长回文子串



我正在尝试使用expandfromCentre方法执行Leetcode最长的回文子串,但我没有像大多数解决方案那样返回函数中的长度,而是尝试返回字符串本身。我认为它应该起作用。。。我不知道是什么原因导致了这个错误。

class Solution {
public String longestPalindrome(String s) {
int n = s.length();
int maxLength = 1;

String res = Character.toString(s.charAt(0));

int start=0; int end=0;

for(int i=0; i<n; i++){
String s1 = expandFromCentre(s, i, i); // aba            
String s2 = expandFromCentre(s, i, i+1);  //abba

if(s1.length()>=s2.length()){
res = s1;
}
else{
res = s2;
}

}                
return res;

}

static String expandFromCentre(String s, int left, int right){
int n = s.length();

while(left>=0 && right<n && s.charAt(left)==s.charAt(right) ){
left--;
right++;
}

return s.substring(left+1, right);

}
}

问题:

if(s1.length()>=s2.length()){
res = s1;
}else{
res = s2;
}

问题在于上面的片段。您可以将其中一个值分配给res,无论它是否会为您提供最长的回文候选者。换句话说,您每次都要覆盖res,而不需要对其长度进行额外检查,因为我们需要找到最长的

解决方案:

你可以做以下修复它:

public String longestPalindrome(String s) {        
String res = "";    
for(int i = 0; i < s.length(); i++){
String s1 = expandFromCentre(s, i, i); // aba            
String s2 = expandFromCentre(s, i, i+1);  //abba

if(res.length() < s1.length()){
res = s1;
}

if(res.length() < s2.length()){
res = s2;
}        
}                
return res;        
}

最新更新