一定要考虑 边界情况 < 号 还是 <= 需要清楚的知道每一行代表的含义 不可以模糊

三部曲 第一步把问题写下来 第二步 认真思考 第三步 把答案写下来


public class Solution {
    public int getLongestPalindrome(String A, int n) {
        // write code here
        if(A == null || n == 0){
            return 0;
        }
        char[] arr = A.toCharArray();
        int m = arr.length;
        boolean[][] dp = new boolean[m][m];
        /*dp[i][j]   表示[i...j] 是回文字串*/
        /*初始化dp */
        for (int i = 0;i<m;i++){
            dp[i][i]  = true;
        }
        /*不管什么算法 先从暴力求解 穷举  开始 */
        /*从长度开始遍历*/

        int  maxLen = 1;
        int  begin = 0;

        for (int l = 2; l <=m ; l++) {
            /*再从起点开始遍历*/
            for (int i = 0; i < m-1; i++) {
                /*然后求得右边j的值  i+l*/
                 int j = i+l-1;

                  if (j>=m){
                     break;
                 }
                char c1 = arr[i];
                char c2 = arr[j];
                 /*边界情况 一定要考虑*/
                 if (l<=3){
                     if (c1 == c2){
                         dp[i][j] = true;
                     }else {
                         dp[i][j] = false;

                     }
                 }else {
                      if (c1 == c2){
                          dp[i][j] = dp[i+1][j-1];
                      }else {
                          dp[i][j] = false;
                      }
                 }
                 if (dp[i][j]&&(j-i+1)>maxLen){
                     maxLen = j-i+1;
                     begin = i;
                 }
            }
        }
        
        return  maxLen;

    }
}