給定乙個字串 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...