給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。
示例 1:
輸入:「bbbab」
輸出:4
乙個可能的最長回文子串行為 「bbbb」。
示例 2:
輸入:「cbbd」
輸出:2
乙個可能的最長回文子串行為 「bb」。
其實關於回文的dp基本都是區間dp. 因為回文左右都要考慮,並且是從裡往外推。狀態就出來了。
dp[i][len]表示 i 為起點,長度為 len 的子串的最長回文子串行長度。回文的初始化是把len=1和len=2都初始化一遍,之後len從3開始往後遞推。
接下來根據狀態分析決策。
用"cbbd"舉例子。
可以觀察到 dp[0][3] = 2. 這是由"cbb"中的"bb"得來的。dp[0][4] = 2. 這是由dp[0][3]"cbb"或者dp[1][3]"bbd"得來的。那麼其中乙個狀態轉移方程就是 dp[i][j] = max(dp[i][j-1], dp[i+1][j-1]) (len >= 3)
再觀察"bbbab"這個例子。
dp[0][3] = 3. 這是因為s[0] == s[2],dp[0][3] = dp[1][1]+2. 狀態方程: dp[i][j] = dp[i+1][j-2]+2 (len >= 3).
這3個方程取最大即可。
class
solution
for(
int len =
2;len <= n;len++)}
return dp[0]
[n];}}
;
LeetCode 最長回文子串行
題目 給定乙個字串 s 找到其中最長的回文子串行,並返回該序列的長度。可以假設 s 的最大長度為 1000 示例 1 輸入 bbbab 輸出 4 乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2 乙個可能的最長回文子串行為 bb 1 s.length 1000 s 只包含小寫...
最長回文子串 最長回文子串行
1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...
最長回文子串行 回文子串行個數
主要內容 1 什麼是回文?2 字元子串和字元子串行的區別 3 最長回文子串行的思路和 4 回文子串行個數的思路和 回文指的是正讀和反讀都一樣的字串,如aba,abba等 字元字串指的是字串中連續的n個字元 如palindrome中,pa,alind,drome等都屬於它的字串 而字元子串行指的是字串...