思路:
对于回文,分为两种
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); }