无优化的动态规划: 遍历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 }
posted on 2019-12-13 14:23  Chenjin123  阅读(496)  评论(0编辑  收藏  举报