import java.util.*;


public class Solution {
    /**
     * 获取字符串中最长回文子串的长度
     *
     * @param A 输入的字符串
     * @return 返回最长回文子串的长度
     */
    public int getLongestPalindrome(String A) {
        // 如果输入字符串为空或长度为0,则直接返回0
        if (A == null || A.length() == 0) {
            return 0;
        }

        int n = A.length(); // 获取字符串长度
        char[] str = A.toCharArray(); // 将字符串转换为字符数组

        int max = 1; // 初始化最长回文长度为1,因为单个字符本身就是回文
        // 创建二维布尔数组,用于记录子串是否为回文
        boolean[][] dp = new boolean[n][n];
        // 所有长度为1的子串都是回文
        for (int i = 0; i < n; i++) {
            dp[i][i] = true;
        }

        // 遍历字符串,检查所有可能的子串
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                // 如果当前字符不相等,则该子串不是回文
                if (str[i] != str[j]) {
                    dp[j][i] = false;
                } else {
                    // 如果字符相等,则判断子串长度
                    if (i - j == 1) {
                        // 相邻字符相同,则构成回文
                        dp[j][i] = true;
                    } else {
                        // 否则判断去掉首尾字符后的子串是否为回文
                        dp[j][i] = dp[j + 1][i - 1];
                    }

                    // 如果当前子串是回文,则更新最长回文长度
                    if (dp[j][i]) {
                        max = Math.max(max, i - j + 1);
                    }
                }
            }
        }
        return max; // 返回最长回文子串的长度
    }
}