我正在尝试使用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;
}