题目描述
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。

解题思路:
暴力穷举法的基础上,改进了回文子串的判断方法,一般的判断一个字串是否回文需要的时间复杂度是O(n)
可以在扫描的过程中记录下某个字串的是否满足回文,为判断其他字串是否是回文提供条件
即如果字串substring(i+1,j-1)是回文,如果string[i]=string[j],那么substring(i,j)也是回文串。

import java.util.*;

public class Palindrome {

    /**
     * @param String a string
     * @param int the length of the string
     * @return int length of the longest palindrome
     */
    public int getLongestPalindrome(String A, int n) {
        // write code here
        if (n == 0) return 0;
        int max = 1;
        char[] arr = A.toCharArray();
        boolean[][] dp = new boolean[n][n];
        dp[0][0] = true;
        for (int i = 1; i < n; i ++) {
            dp[i][i] = true;
            dp[i][i-1] = true;
        }
        for (int i = 1; i < n; i ++) {
            for (int j = 0; j < i; j ++) {
                if (dp[j+1][i-1] && arr[i] == arr[j]) {
                    dp[j][i] = true;
                    if (max < i - j + 1) {
                        max = i - j + 1;
                    }
                } else {
                    dp[j][i] = false;
                }
            }
        }
        return max;
    }
}