import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param A string字符串
     * @return int整型
     */
    public int getLongestPalindrome(String A) {
        // write code here
        if (A == null || A.length() < 1) {
            return 0;
        }
        char[] arr = A.toCharArray();
        int n = arr.length;
        boolean[][] dp = new boolean[n][n];
        int max = 1;
        
        for (int r = 1; r < n; r++) {
            for (int l = 0; l < r; l++) {
                if (arr[l] == arr[r] && (r - l <= 2 || dp[l + 1][r - 1])) {
                    dp[l][r] = true;
                    max = Math.max(r - l + 1, max);
                }
            }
        }

        return max;
    }

    public int getLongestPalindrome2 (String A) {
        // write code here
        if (A == null || A.length() < 1) {
            return 0;
        }
        char[] arr = A.toCharArray();
        int res = 0;
        for (int i = 0; i < arr.length; i++) {
            int len1 = helper(arr, i, i);
            int len2 = helper(arr, i, i + 1);
            res = Math.max(res, Math.max(len1, len2));
        }
        return res;
    }

    private int helper(char[] arr, int l, int r) {
        while (l >= 0 && r < arr.length) {
            if (arr[l] == arr[r]) {
                l--;
                r++;
            } else {
                break;
            }
        }
        return r - l - 1;
    }
}