首页 笔记 图片 查字 
所属分类:其它
浏览:36
内容:

要点:
动态规划

代码:

public class LongestPalindrome {
    public static void main(String[] args) {
        String input = "ccababdeee";
        String s = longestPalindrome(input);
        System.out.println(s);
    }

    static String longestPalindrome(String input) {
        int l = input.length();
        if (l <= 1) return input;

        boolean[][] dp = new boolean[l][l];

        for (int i = 0; i < l; i++) {
            dp[i][i] = true;
        }

        char[] chs = input.toCharArray();
        int max = 1;
        int start = 0;

        for (int j = 1; j < l; j++) {
            for (int i = 0; i < l - 1 && i < j; i++) {
                if (chs[i] != chs[j]) {
                    dp[i][j] = false;
                } else {
                    if (j - i < 3) {
                        dp[i][j] = true;
                    } else {
                        dp[i][j] = dp[i + 1][j - 1];
                    }
                }

                if (dp[i][j] && j - i + 1 > max) {
                    max = j - i + 1;
                    start = i;
                }
            }
        }

        return input.substring(start, start + max);
    }
}