1. 程式人生 > 資訊 >歌爾股份:Q3 淨利潤同比增長 29.61%,VR、智慧穿戴等裝置的盈利能力改善

歌爾股份:Q3 淨利潤同比增長 29.61%,VR、智慧穿戴等裝置的盈利能力改善

5. 最長迴文子串

1.狀態定義

//dp[i][j]表示s[i…j]是否為迴文串 2.狀態轉移方程 dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1] 3.邊界值處理 dp[i][i] = true
class Solution {
    public String longestPalindrome(String s) {

        int len = s.length();
        if(len < 2) return s;

        int maxLen = 1;
        int begin = 0;

        
//dp[i][j]表示s[i…j]是否為迴文串 boolean[][] dp = new boolean[len][len]; for(int i = 0; i < len; i++) dp[i][i] = true; char[] charArray = s.toCharArray(); for(int j = 1; j < len; j++) { for(int i = 0; i < j; i++) { //左右邊界不相等,必不可能為迴文串
if(charArray[i] != charArray[j]) dp[i][j] =false; //左右邊界相等的情況下 else { //i, j索引差小於3, i + 1 和 j - 1索引差小於1(0 或-1) //為0時s[i + 1 .. j - 1]長度為1,為-1時長度為0,此時左右邊界相等即為迴文串 if (j - i < 3) dp[i][j]
= true; //否則看去掉左右邊界的原串是否是迴文串 else dp[i][j] = dp[i + 1][j - 1]; } //是迴文串且更長 if(dp[i][j] && j - i + 1 > maxLen) { maxLen = j - i + 1; begin = i; } } } return s.substring(begin, begin + maxLen); } }