516 最長回文子串行

2021-10-02 16:28:05 字數 798 閱讀 6483

516. 最長回文子串行

子串行和子串是不同的,子串行是不連續的序列,而子串是連續的。

這個題所求為最長的回文子串行,如果要遍歷的話,時間複雜度為指數級別,肯定是超時的。

這種要求為o(n^2)的時間複雜度,除了貪心,基本只有dp能做到了,那麼子問題是什麼呢?

這樣定義:如果已知區間 i - j 中最長的回文子串行長度為 dp[i] [j],那麼區間 [i - 1,j + 1]有兩種情況

如果要求dp[i] [j],那麼需要知道dp[i - 1] [j],dp[i] [j - 1],dp[i - 1] [j - 1],因為s[i]和s[j]之間的關係不確定,可能相等,也可能不等。

初始化:

for

(int i =

0; i < length; i++

) dp[i]

[i]=1;

//乙個字元也算是回文串

由上述分析,可以看出如果我們要求的就是dp[0] [s.length - 1],但是我們應該怎麼遍歷呢?

一開始,我們知道了dp矩陣的主對角線,並且下三角形矩陣是沒有意義的,比如dp[3] [1]沒有實際意義,要求dp矩陣最右上角的元素,比較方便的就是倒著遍歷(外層迴圈向上,內層迴圈向右)

class

solution

for(

int i = length -

1; i >=

0; i--)}

return dp[0]

[length-1]

;}}

516 最長回文子串行

516.最長回文子串行 給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。示例 1 輸入 bbbab 輸出 4乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2乙個可能的最長回文子串行為 bb 狀態定義 dp i j 代表str的區間 i,j 最長的回文...

516 最長回文子串行

516.最長回文子串行 給定乙個字串 s 找到其中最長的回文子串行,並返回該序列的長度。可以假設 s 的最大長度為 1000 示例 1 輸入 bbbab 輸出 4 解釋 乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2 解釋 乙個可能的最長回文子串行為 bb 剛開始做提的時候...

516 最長回文子串行

給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。示例 1 輸入 bbbab 輸出 4 乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2 乙個可能的最長回文子串行為 bb 解 狀態 f i j 表示 s 的第 i 個字元到第 j 個字元組成的子串中,最...