思路:
对整个string的每一个字母都做一个查询最长回文数操作,回文数分奇偶,首先进行奇数回文数查询,如果该字母和下一个字母相同,则也进行偶数回文数查询,然后用end-start记录最长length,返回即可。最简单的解法,应该还有优化空间。
public String longestPalindrome(String s) { int start = 0, end = 0; char[] arr = s.toCharArray(); for (int i = 0; i < arr.length; i++) { //单数回文数 int len = getPalindromeLength(arr, i, i); //偶数回文数 if (i + 1 < s.length() && arr[i] == arr[i + 1]) { len = Math.max(getPalindromeLength(arr, i, i + 1), len); } if (len > end - start) { start = i - (len - 1) / 2; end = i + len / 2; } } return s.substring(start, end + 1); } private int getPalindromeLength(char[] arr, int start, int end) { while (start >= 0 && end < arr.length && arr[start] == arr[end]) { start--; end++; } return end - start - 1; }