思路:
对于回文,分为两种
1、奇数长度回文,以一个字符作为中心。
2、偶数长度回文,以两个字符作为中心。
private static int longestLen(String s, int left, int right){
while(left >= 0 && right < s.length()){
if(s.charAt(left) != s.charAt(right)){
break;
}
left--;
right++;
}
return right - left - 1;
}
该函数结合奇数和偶数情况,对中心两侧的字符进行检查,以获取回文串的最大长度。
在获取了最大长度后,加之中心字符的索引,我们就可以得到该回文字符串。
这里需要注意返回的内容是right - left -1;
如果不理解可以随手画个图感受一下。
主函数:
public String longestPalindrome(String s) {
if(s==null || s.length() == 1) return s;
int index = 0;
int length = 1;
for (int i = 0; i < s.length(); i++) {
int len1 = longestLen(s, i, i);
int len2 = longestLen(s, i, i + 1);
if(len1 > length){
length = len1;
index = i - length / 2;
}
if(len2 > length){
length = len2;
index = i - length / 2 + 1;
}
}
return s.substring(index, index + length);
}