LeeCode 5 最長回文字串(自己的演算法)

2021-09-27 22:22:15 字數 1430 閱讀 1934

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