輸出字串中的最長回文子串

2022-05-08 05:54:08 字數 1411 閱讀 6427

示例:

輸入:"acbbc" ,輸出:"cbbc"

輸入:"a",輸出:"a"

python解決方案1:

設定滑動視窗,逐漸減小滑動視窗的大小

def longestpalindrome(s):

if len(s) <= 1:

return

s sub_len =len(s)

while sub_len > 1:

for i in range(len(s)-sub_len+1):

sub_s = s[i:i+sub_len]

if s[i] == s[i+sub_len-1] and sub_s == sub_s[::-1]:

return

sub_s

sub_len -= 1

return s[0]

python解決方案2:

從中間開始,分別向兩邊搜尋回文序列

def

longestpalindrome(s):

if len(s) <= 1:

return

s s = "

*" + "

*".join(s) +"*"

mid = len(s) // 2longest = ""

left_mid =mid

right_mid =mid

while len(longest) < 2*left_mid+1:

start_left =left_mid

end_left =left_mid

while start_left >=0 and s[start_left] ==s[end_left]:

start_left -= 1end_left += 1

if end_left-start_left-1 >len(longest):

longest = s[start_left+1:end_left]

if right_mid !=left_mid:

start_right =right_mid

end_right =right_mid

while end_right < len(s) and s[start_right]==s[end_right]:

start_right -= 1end_right += 1

if end_right - start_right - 1 >len(longest):

longest = s[start_right+1:end_right]

left_mid -= 1right_mid += 1out = longest.replace("

*",""

)

return out

第二種方案執行效率更高

字串 最長回文子串

最長回文子串 回文子串 即正著看和倒著看相同的子串,如 abcba yyxyy。由於此類題目為面試筆試常考題目,所以現在就來整理一下啦。1 暴力求解法 最直接的想法就是暴力求解,但是我們可以看到下面的 時間複雜度是o n 3 string findlongeststring string str 暴...

字串 最長回文子串

介紹一下幾個概念 就是從左往右和從右往左讀是一樣的。就如標語 我為人人,人人為我 子串,顧名思義,就是在原字串中的子集,就叫子串。串就是不能分割的,就是連在一起,這個要區別與子串行,子串行就是一段 一段的。列舉各個起點和終點,然後進行判斷該子串是否為回文,最後就是更新最長的回文串。列舉起點和終點 o...

字串 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 用manacher class solution int max 1 int res 0 儲存最...