給定乙個字串s
,找到s
中最長的回文子串。可以假設s
的最大長度為 1000
樣例
輸入 xabbbbbabbacd
輸出 abbbbba
classsolution }}
return
s.substr(start,maxlen);
}};
此題的狀態轉移方程是 dp[i][j]=s[i]==s[j]&&dp[i-1][j+1]==1;
和之前所做的題不同,按照以往,會設定狀態i,j為在:區間i,j內字元的最長回文長度為dp[i][j],或者設定以i為結尾字串的最長回文長度為dp[i],但是這樣找不出遞推式。可以轉換思路為,設定狀態i,j為:以i為起點j為終點的字串是否為回文dp[i][j]=1或dp[i][j]=0,若s[i]=s[j]並且dp[i-1][j+1]是回文,則dp[i][j]是回文.maxlen初始化為1,若dp[i][j]是回文,則maxlen=i-j+1,start=j。
如果用雙遞迴找出所有子串再判斷是否為回文,由於沒有狀態轉移方程,所以子串會被多次重複計算。
【總結】
1.dp的值可以bool表示0、1,用下標表示位置。
2.動態規劃不一定用到遞迴,用迴圈也可以。
最長回文子串 動態規劃O N 2
分析 定義二維陣列dp i,j 用以表示si sj是回文 true 或不是回文 false 定義dp陣列全為false 第一次迴圈設定單個字元為回文子串 dp i i true 第二次迴圈判斷相鄰兩個字元dp i i 1 是否為回文,若是則將回文子串的起始位置設為i,長度設為2 第三次迴圈判斷長度l...
動態規劃 最長回文子串
動態規劃 最長回文子串 題目描述 給出乙個字串s,求s的最長回文子串的長度 樣例 字串 patzjujztaccbcc 的最長回文子串為 atzjujzta 長度為9。動態規劃思想 令dp i j 表示s i 至s j 所表示的子串是否是回文子串,是則為1,不是為0。這樣根據s i 是否等於s j ...
動態規劃 最長回文子串
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 本題有很多種解法,最簡單的暴力求解,但是會超時。下面分別說明動態規劃法和中心擴散法。解法一 動態規劃法...