題目描述:
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例 1:
輸入: 「babad」
輸出: 「bab」
注意: 「aba」 也是乙個有效答案。
示例 2:
輸入: 「cbbd」
輸出: 「bb」
方法1 中心擴散
主要思路:
(1)遍歷字串的每乙個位置,以該位置作為基點,向兩端進行擴充套件,判斷回文;
(2)針對每乙個基點,需要判斷回文字串可能是偶數或者奇數的兩種情形;
(3)判斷回文字串時,終止條件是左右方向不越界,且一直滿足回文要求;
class
solution
//根據左右索引判斷當前回文字串是否長度更長
if(right-left>split.second-split.first)
//回文字串可能為偶數的情形
left=i;
right=i+1;
while
(left>=
0&&rightsize()
&&s[right]
==s[left])if
(right-left>split.second-split.first)
}//返回滿足要求的回文字串
return s.
substr
(split.first+
1,split.second-split.first-1)
;}};
方法2 動態規劃
思路:(1)對於長度大於2的回文字串,其去掉兩端的字元後,依舊是回文字串,那麼,對於驗證某個字串是否是回文字串,只要保證其減去兩端後的子字串是回文,且兩端字元相等,則該字串是回文字串,這就相當於是狀態轉移;
(2)對於字串長度為1的字串,是回文字串,對於長度為2的字串,只要這兩個字串相等,則是回文字串,這就相當於是初始狀態;
class
solution
//判斷子字串長度為2的情形
else
if(length==1)
//判別子字串長度大於2的情形
else
//判斷當前回文子串長度是否是當前最長的
if(dp[i]
[j]&&length>split.second-split.first)}}
//返回滿足要求的子串
return s.
substr
(split.first,split.second-split.first+1)
;}};
5 最長回文子串 動態規劃)
一 題目描述 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 二 題解 方法一 動態規劃 dp i j 表示從位置i到位置j的子串是否為回文串 如果s...
LeetCode 動態規劃 5 最長回文子串
原題連線 class solution int len s.length if len 1 if len 1 len 3 s.charat 0 s.charat len 1 狀態陣列定義 dp 游標位置i j ij包含的部分是否是回文字串 boolean dp newboolean len len ...
動態規劃 最長回文子串
動態規劃 最長回文子串 題目描述 給出乙個字串s,求s的最長回文子串的長度 樣例 字串 patzjujztaccbcc 的最長回文子串為 atzjujzta 長度為9。動態規劃思想 令dp i j 表示s i 至s j 所表示的子串是否是回文子串,是則為1,不是為0。這樣根據s i 是否等於s j ...