public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    public int getLongestPalindrome (String A) {
        // write code here
        char[] cha = A.toCharArray();//将字符串转换为字符数组
        int len = A.length();//字符串的长度
        int count = 0;//计数器,统计最长回文子串的长度
        boolean[][] dp = new boolean[len][len];//动态dp数组
        for(int j=0;j<len;j++){//第一层,从纵坐标开始遍历
            for(int i=0;i<=j;i++){//第二层,从横坐标开始遍历
                if(i == j){//字符串长度为1时,必为回文字符串
                    dp[i][j] = true;//更新动态dp数组
                    if(dp[i][j]){//更新计数器
                        count = Math.max(count,j-i+1);
                    }
                }else if(i == j-1){//字符串长度为2时,如果两个字符相等,也是回文字符串
                    if(cha[i] == cha[j]){
                        dp[i][j] = true;//更新动态dp数组
                    }
                    if(dp[i][j]){//更新计数器
                        count = Math.max(count,j-i+1);
                    }
                }else if(j-i > 1){//字符串长度大于2时,如果两个字符相等并且dp[i+1][j-1]为真时,也是回文字符串
                    if(cha[i]==cha[j] && j>0 && i<len-1 && dp[i+1][j-1]){
                        dp[i][j] = true;//更新动态dp数组
                    }
                    if(dp[i][j]){//更新计数器
                        count = Math.max(count,j-i+1);
                    }
                }
            }
        }
        return count;
    }
}