无优化的动态规划: 遍历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 }