最长回文串-leetcode第五题

给出一个字符串,求出他的最长回文串。
已知的解法有三种,动态规划,中心扩散,manacher。这里准备使用前两种算法,另外一种暂时没时间研究。
解法1:
动态规划
  对于回文串,单独的一个字符是回文串,两个相邻的字符相等时是回文串。

    public String longestPalindrome(String s) {
        int ans = 0;
        String str = s.substring(1);
    // 回文串,对于字符串S,如果串p(i,j)是回文串,那么p(i+1,j-1)也是回文串
        int n = s.length();
        boolean dp[][] = new boolean[n][n];
        for (int i = 0; i < n ; i ++) {
            for (int j = 0; j + i < n; j++) {

                if (i == 0) {
                    dp[j][j+i] = true;
                }
                else if (i == 1) {
                    dp[j][j+i] = (s.charAt(j) == s.charAt(j+i));
                }
                else {
                    dp[j][i+j] = (s.charAt(j) == s.charAt(i+j) && dp[j+1][i+j-1]);
                }
                if (dp[j][i+j] && (i+1 > ans)) {
                    str=s.substring(j,i+j+1);
                }
            }
        }
        return str;
    }

剩下的明天补上。。。

你可能感兴趣的:(java,……数据结构,算法重修,算法)