無優化的動態規划: 遍歷1-n長度的字符串,並用dp數組記錄前面的子回文串
時間復雜度: O(n^2) 空間復雜度: O(n^2)
1 class Solution { 2 public String longestPalindrome(String s) { 3 if(s.isEmpty()) return ""; 4 int n=s.length(); 5 int si=0,sj=0; 6 boolean[][] dp=new boolean[n][n]; //dp[i][j]=true:表示字符串[i,j]區段是回文 7 for(int i=0;i<n;i++){ //單個字符默認回文 8 dp[i][i]=true; 9 } 10 for(int i=0;i<n-1;i++) { //判斷兩個字符是否回文 11 if(s.charAt(i)==s.charAt(i+1)){ 12 dp[i][i+1]=true; 13 si=i; 14 sj=i+1; 15 } 16 } 17 for(int k=3;k<=n;k++){ 18 for(int i=0;i<n+1-k;i++){ 19 if(s.charAt(i)==s.charAt(i+k-1)&&dp[i+1][i+k-2]){ 20 dp[i][i+k-1]=true; 21 si=i; 22 sj=i+k-1; 23 } 24 } 25 } 26 return s.substring(si,sj+1); 27 } 28 }