5. 最長回文子串(動態規划)


無優化的動態規划: 遍歷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 }


免責聲明!

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



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