5.Longest Palindromic Substring

    //动态规划
    //假设字符串下标为i到j之间判断是否是回文串,dp[i][j](其中i <= j),
    //如果s.charAt(i)==s.chatAt(j)那么需要判断从下标i+1到下标j-1是否为回文串,即dp[i+1][j-1](其中i+1<=j-1)是否是回文串
    //dp[i][j] = 1 (i==j)
    //         =s.charAt(i)==s.charAt(j) && dp[i+1][j-1] (i<=j-1)
    public String longestPalindrome(String s) {
        if(null == s || s.length() == 0) return s;
        int sLen = s.length();
        boolean[][] dp = new boolean[sLen][sLen];
        int L = 0, R = 0;
        int max = 0;
        //init
        for(int i = 0; i < sLen; i++) {
            for(int j = 0; j < sLen; j++) {
                if(i >= j) {
                    dp[i][j] = true;
                }else {
                    dp[i][j] = false;
                }
            }
        }
        for(int j = 0; j < sLen; j++) {
            for(int i = 0; i < j;i++) {
                if(s.charAt(i) == s.charAt(j)) {
                    dp[i][j] = dp[i+1][j-1];
                    if(dp[i][j] && j - i + 1 >= max ){
                        L = i;
                        R = j;
                        max = j - i + 1;
                    }
                }else {
                    dp[i][j] = false;
                }
            }
        }
        return s.substring(L, R + 1);
    }

猜你喜欢

转载自blog.csdn.net/STU756/article/details/81677182