import java.util.*; public class Solution { public int getLongestPalindrome(String A, int n) { // write code here if(n == 0 || n == 1){ return n; } int maxLength = 0; for(int i = 0; i < n; i++){ //每取出一个元素后 都从末尾去寻找相等的值 来判断二者之间是否可以组成回文子串 char next = A.charAt(i); int[] ends = findNextFromEnd(A,i,next); for(int j = 0;j<ends.length;j++){ //依次判断每一个位置二者之间是否可以组成回文子串 boolean b = can(A,i,ends[j]); if(b){ maxLength = Math.max(maxLength,ends[j] - i + 1); } } } return maxLength; } private int[] findNextFromEnd(String A,int i,char next){ ArrayList<Integer> result = new ArrayList<>(); for(int j = A.length() - 1; j > i; j--){ char next2 = A.charAt(j); if(next2 == next){ result.add(j); } } int[] res = new int[result.size()]; for(int k = 0;k< result.size();k++){ res[k] = result.get(k); } return res; } private boolean can(String A,int begin,int end){ while(begin < end){ if(A.charAt(begin) == A.charAt(end)){ begin ++; end --; } else { return false; } } return true; } }