動態規划 最長回文子串


Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example 1:

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.

Example 2:

Input: "cbbd"
Output: "bb"



public static String longestPalindrome(String s) {
        int n = s.length();
        if(n==0 || s==null)
            return s;
        String reString = null;
        boolean[][] dp = new boolean[n][n];
        for(int i = n-1;i >= 0; i--) {
            for(int j = i; j < n; j++) {
                dp[i][j] = s.charAt(i)==s.charAt(j)&&(j-i<3 || dp[i+1][j-1]);    //判斷是否為回文串
                if(dp[i][j] && (reString==null || reString.length()<j-i+1))   //判斷這個回文串的長度是否大於最長長度
                    reString = s.substring(i,j+1);
            }
        }
        return reString;
    }

使用boolean創建一個二維數組dp[][],dp[i][j]的值代表從第i個字符到第j個字符的字符串是否為回文串。

首先判定一個字符串是回文串有什么特點,如果dp[i][j]是回文串,那么dp[i+1][j-1]也是回文串,由此我們可以得出:

 dp[i][j] = s.charAt(i)==s.charAt(j)&&(j-i<3 || dp[i+1][j-1])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM