leetcode 最長回文子串行 區間dp

2021-10-02 15:31:58 字數 827 閱讀 4734

給定乙個字串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等都屬於它的字串 而字元子串行指的是字串...