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 個字元組成的子串中,最...