代码:

public int getLongestPalindrome(String A, int n) {
        boolean [][]dp=new boolean[n][n];    //构建dp
        for(int i=0;i<n;i++) dp[i][i]=true;  //给对角线赋值为true
                if(A.length()<2 && !A.isEmpty())
                {return 1;  //字符串
                }else if(A.isEmpty()){return 0;
                                     }
        int maxLen=1;    //存储最大元素
        char []str= A.toCharArray();     //将字符串转换成char数组,方便下面的判断

        for(int j=1;j<n;j++){
            for(int i=0;i<j;i++){
                if(str[i]==str[j]){
                    if(j-i<3){ dp[i][j]=true;  //如果是在三个字符以内(包含三个字符),因为已经确定了首尾相同,所以dp[i][j]为true
                             }else{
                        dp[i][j]=dp[i+1][j-1];    //这是状态转换方程,也就是动态规划的重点所在--将问题划分为子问题
                    }

                             }else{   //两字符不相同,dp[i][j]为false
                    dp[i][j]=false;
                } 
                if (dp[i][j] && j -i + 1 >maxLen ) {
                  // 更新最大长度
                  maxLen=j-i+1;
              }
            }
        }
        return maxLen;
    }

分析:
图片说明