Leetcode 最長回文子串

2021-10-08 08:12:47 字數 1119 閱讀 9298

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

最長回文子串:正反遍歷結果相同的子串。

示例 1:

輸入: 「babad」

輸出: 「bab」

注意: 「aba」 也是乙個有效答案。

示例 2:

輸入: 「cbbd」

輸出: 「bb」

字串的相關題目,都可以向動態規劃的方向思考,這個題我剛開始想的是定義乙個dp[i][j] 表示 字元從i–j是否可構成回文字串,如果s[i]==s[j],那麼就看dp[i+1][j-1]是否構成回文子串,但是我想之前的動態規劃dp[i][j]都是與dp[i-1][j]或者dp[i][j-1]相關的,我沒想到dp[i][j]還能往前跑。

dp[i][j]的實質就是填乙個二維陣列:

因為每個dp[i][j]都是根據左下的資料得來,所以我們要豎著填寫dp[i][j]這個二維陣列!!

定義dp[i][j]

dp[i][j]表示字串i–j是否構成回文子串

遞推公式

if(s[i] == s[j] && j-i < 3) dp[i][j] = true;

if(s[i] == s[j] && j-i >= 3) dp[i][j] = dp[i+1][j-1];

初始化臨界值

dp[i][i] = true;

string longestpalindrome(string s) }}

string p = s.substr(beg,res);

return p;

}

我們在分析dp陣列時可以畫出dp數**,更便於分析

此題一定要注意:

1.因為遞推公式的原因,我們要豎著填寫dp陣列!

2.如果字串個數為1個或者2個或者3個,那麼只要首尾字元相等就構成回文子串,也就是**中的 i-j<3

string類中的substr()函式,string p = s.substr(i,j) 表示從s字串的第i個字元開始擷取j個字元,並返回這個string串

最長回文子串 LeetCode 五 最長回文子串

題目 最長回文子串 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。題目解析 回文?當回文串長度為奇數時,比如 北京計程車租出京北 當回文串長度為偶數的時候,比如 1221 以上兩種情況有乙個共同的特點就是有乙個中心,那在 中如何表示中心呢?class solution ...

leetcode 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 中心拓展法 由乙個中心點開始向兩邊拓展,檢測邊界,判斷兩個值是否相等,相等則繼續拓展下去,檢測邊界。1....

最長回文子串(LeetCode)

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb class solution def longestpalindrome self,s type s str r...