5.最長迴文子串的簡單解法

1.暴力法求解

時間複雜度O(n^3)
空間複雜度O(n)

代碼:

class Solution {
    public String longestPalindrome(String s) {
        if(s.trim().equals("")){
            return "";
        }
        char[] arr = s.toCharArray();
        int maxlength = 0;
        int minIndex = 0;
        int maxIndex = 0;
        for(int i=0;i<arr.length;i++){
            for(int j=arr.length-1;j>i;j--){
                if(arr[i]==arr[j]) {
                	boolean flag = true;
                	for(int k=1;k<=(j-i)/2;k++) {
                		if(arr[i+k]!=arr[j-k]) {
                			flag = false;
                			break;
                		}
                	}
                	if(flag == true) {
                		if((j-i+1)>maxlength) {
                			maxlength = j-i+1;
                			minIndex = i;
                			maxIndex = j;
                		}
                	}
                }
            }
        }
        return s.substring(minIndex, maxIndex+1);
    }
} 

2.動態規劃法求解

對於字符串str,假設dp[i,j]=1表示str[i...j]是迴文子串,那個必定存在dp[i+1,j-1]=1。這樣最長迴文子串就能分解成一系列子問題,可以利用動態規劃求解了。首先構造狀態轉移方程

 

      上面的狀態轉移方程表示,當str[i]=str[j]時,如果str[i+1...j-1]是迴文串,則str[i...j]也是迴文串;如果str[i+1...j-1]不是迴文串,則str[i...j]不是迴文串。

      初始狀態

  • dp[i][i]=1
  • dp[i][i+1]=1 if str[i]==str[i+1]

 時間複雜度O(n^2)
 空間複雜度O(n^2)

引用自https://www.cnblogs.com/mini-coconut/p/9074315.html

https://blog.csdn.net/qq_39478237/article/details/89457230

    /**
     * 動態規劃法
     * 時間複雜度O(n^2)
     * 空間複雜度O(n^2)
     */
    public static String longestPalindrome1(String s) {
    	if(s.trim().equals("")) {
    		return "";
    	}
        char[] arr = s.toCharArray();
        int maxlength = 0;
        int minIndex = 0;
        int maxIndex = 0;
        boolean[][] dp = new boolean[arr.length][arr.length];
        for(int i=0;i<arr.length;i++){	//i+1爲所找子串長度,i從0開始遞增
        	for(int j=0;j<arr.length-i;j++) {
        		dp[j][j+i] = (arr[j]==arr[j+i])&&((i<2)||dp[j+1][j+i-1]);
        		if(dp[j][j+i]&&maxlength<(i+1)) {
        			maxlength = i+1;
        			minIndex = j;
        			maxIndex = j+i;
        		}
        	}
        }
        return s.substring(minIndex, maxIndex+1);
    }

3Manacher法

https://www.cnblogs.com/alan-blog-TsingHua/p/11048990.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章