#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    bool IsValid(string str){
        if(str.empty()||str.size()==1) return true;
        
        int n= str.size();
        int len = n/2;
        for(int i=0;i<len;i++){
            if(str.at(i)!=str.at(n-i-1)) return false;
        }
        return true;
    }
    int getLongestPalindrome(string A) {
        // write code here
        if(A.empty()) return 0;
        if(A.size()==1) return 1;
        int n=A.size();
        int max_len=1;

        vector<vector<bool >> dp(n,vector<bool >(n,false));
        for(int i=1;i<n;i++) dp[i][i]=true;
        for(int i=1;i<n;i++)for(int j=i-1;j>=0;j--){
            if(A.at(i)!=A.at(j)) dp[i][i]=false;
            else {
                if(i-j-1<=1) dp[i][j]=true;
                else dp[i][j]=dp[i-1][j+1];   
                if(dp[i][j]==true) max_len = max(max_len,i-j+1);
            }
        }
        return max_len;
    }
};

// #include <vector>
// class Solution {
// public:
//     /**
//      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
//      *
//      * 
//      * @param A string字符串 
//      * @return int整型
//      */
//     bool IsValid(string str){
//         if(str.empty()||str.size()==1) return true;
        
//         int n= str.size();
//         int len = n/2;
//         for(int i=0;i<len;i++){
//             if(str.at(i)!=str.at(n-i-1)) return false;
//         }
//         return true;
//     }
//     int getLongestPalindrome(string A) {
//         // write code here
//         if(A.empty()) return 0;
//         if(A.size()==1) return 1;
//         int n=A.size();
//         int res=1;
//         int tmp_len = 0;
//         vector<int > dp(n,1);
//         for(int i=1;i<n;i++){
//             tmp_len = 0;
//             for(int j=0;j<i;j++){
//                 string tmp_str = A.substr(j,i-j+1);
//                 if(IsValid(tmp_str)) {tmp_len = max(tmp_len,i-j+1);res = max(res,tmp_len);}
//             }
//         }
//         return res;
//     }
// };