思路:動態規劃
狀態 dp(i,j)以i開頭,j結尾的子串行中的最大回文子串行的長度
轉移:dp(i+1,j),dp(i,j-1);
結束條件:
i>j return 0;
if(s[i]==s[j]&&i!=j) return dp(i+1,j-1)+2
if(s[i]s[j]&&ij) return dp(i=1,j-1)+1
**思路如下,注:超時
class
solution
intlongestpalindromesubseq
(string s)
};
dp[i]
[j]:第i個開始,第j個結束的字串
if(s[i]
==s[j]
) dp[i]
[j]=dp[i+1]
[j-1]+
2;else,下面的狀態轉移取最大
[i][j-1]
->
[i][j]^|
[i+1
][j]
對角線設為1
for(
int i=
0;isize()
;i++
) dp[i]
[i]=1;
遍歷所有狀態轉移,對角線出發
for(
int i=
1;isize()
;i++
)for
(int j=
0;jsize()
-i;j++
) 計算 dp[j]
[j+i]
class
solution
;for
(int i=
0;isize()
;i++
) dp[i]
[i]=1;
for(
int i=
1;isize()
;i++)}
return dp[0]
[s.size()
-1];
}};```
LeetCode 516 最長回文子串行
這題看了好久 本來以為和最長字串差不多用動態規劃設兩個列表來算但是沒什麼頭緒 後來去看了別人的解法 看了十幾分鐘才看懂 下面這種解法 1單位要單獨拿出來算 從2開始因為互文的子串行兩頭肯定是一樣的 如 aba acbca 假如能使 martix i j 等於從 s i 到 s j 所包含的最大子串行...
leetcode 516 最長回文子串行
給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。示例 1 輸入 bbbab 輸出 4 乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2 乙個可能的最長回文子串行為 bb 解題思路 狀態 f i j 表示 s 的第 i 個字元到第 j 個字元組成的子串...
leetcode516 最長回文子串行
給定乙個字串s,找到其中最長的回文子串行。可以假設s的最大長度為1000。示例 1 輸入 bbbab 輸出 4 乙個可能的最長回文子串行為 bbbb 示例 2 輸入 cbbd 輸出 2 乙個可能的最長回文子串行為 bb f i j 表示 s 的第 i 個字元到第 j 個字元組成的子串中,最長的回文序...