class{ public String longestPalindrome(String s){ if (s == null || s.length() <= 1){ return s; } char[] chars = s.toCharArray(); Integer[] left = process(chars, true); Integer[] right = process(chars, false); if (left[1] - left[0] > right[1] - right[0]) { return s.substring(left[0], left[1]+1); } else { return s.substring(right[0], right[1]+1); } }
privatestatic Integer[] process(char[] chars, boolean left) { int min = 0; int max = 0; int len = 0; int index = chars.length / 2; while (index >= 0 && index <= chars.length - 1) { int l = 1; int p = index - 1; int q = index + 1; while (p >= 0 && chars[index] == chars[p]) { p--; l++; } while (q <= chars.length - 1 && chars[index] == chars[q]) { q++; l++; } while (p >= 0 && q <= chars.length - 1) { if (chars[p] != chars[q]) { break; } p--; q++; l += 2; } if (l > len) { max = q - 1; min = p + 1; len = l; } index = left ? index - 1 : index + 1; } returnnew Integer[]{min, max}; } }
近期评论