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])