給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
示例 1:
輸入: "babad"
輸出: "bab"
注意: "aba" 也是乙個有效答案。
示例 2:
輸入: "cbbd"
輸出: "bb"
思路:我的第一想法是要遍歷給定字串,不要從第乙個字元開始遍歷,從第二個字元開始,這個寫程式的時候方便一點。首先,我們先比較緊挨著的兩個字元,如果一致,再由這緊挨著的兩個字元向外擴充套件,直到出現字元不一致或者超出給定字串長度的情況,停止擴充套件,並將此時的子字串記錄下來。接著,我們比較以當前遍歷字元為中心,左右兩邊的字元,如果一致,繼續往左右兩邊擴充套件,直到出現字元不一致或者超出給定字串長度的情況,停止擴充套件,並將此時的子字串記錄下來。最後通過比較得出最長回文字串。
def longestpalindrome
(self, s)
: w=
'' w1=
'' w2=
''for i in
range(1
,len
(s))
: step1 =
1 step2 =
1while true:
if i-step1>=
0 and i+step1-
1<
len(s) and s[i+step1-1]
==s[i-step1]
: w1 = s[i - step1:i + step1]
step1+=
1else
: # print
(w1,step1)
iflen
(w1)
>
len(w)
: w=w1
break
while true:
if i-step2>=
0 and i+step2<
len(s) and s[i+step2]
==s[i-step2]
: w2 = s[i - step2:i + step2+1]
step2+=
1else
: # print
(w2,step2)
iflen
(w2)
>
len(w)
: w=w2
break
if not w:
w=s[0]
return w
leecode 5(求回文字串)
方法一 中心擴充套件法 動態規劃 方法二 manacher 演算法 法一 include include include include typedef struct node node 中心擴充套件法 動態規劃 node getreturnsize char s,int center pre,in...
leecode 5 最長回文子串 遞迴解法
動態規劃,本質上就是 帶備忘錄的遞迴的計算過程。遞迴過程為 自頂向下的問題拆解和自底向上的問題計算。迭代形式的動態規劃,略過問題拆解,直接計算,能節省一定的時空。本題中,因遞迴法的時空效率太差 擊敗5 需進一步優化 改為迭代形式 分析過程 遞迴過程 暴力遞迴窮舉 備忘錄優化 構造遞迴遍歷 二叉樹遍歷...
LeeCode筆記 5 最長回文子串
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 使用動態規劃,dp i j 是從j到i的子串是否是回文串 值為true或false dp i i 肯定...