5 最長回文子串

2021-10-09 09:14:59 字數 1487 閱讀 2643

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。

示例 1:

輸入: 「babad」

輸出: 「bab」

注意: 「aba」 也是乙個有效答案。

示例 2:

輸入: 「cbbd」

輸出: 「bb」

動態規劃

當字串 s[i.

..j] 的長度為1,則它是回文串;

當字串s[i.

..j]的長度為2,且s[i]

=s[j],則它是回文串,否則不是;

當字串s[i.

..j]的長度大於2,如果s[i]

=s[j]

,並且s[i+1.

..j-

1]是回文串,則它是回文串,否則不是.

填表順序:從下往上,填寫矩陣的上三角區域。

import sys

if __name__ ==

"__main__"

: s = sys.stdin.readline(

) length =

len(s)-1

if length <=1:

print

(s) sys.exit(

)

dp =[[

0for _ in

range

(length)

]for _ in

range

(length)

]for i in

range

(length)

: dp[i]

[i]=

1 max_length =

0 start =

0for i in

range

(length-2,

-1,-

1):for j in

range

(i, length)

:## 填表

if j-i ==1:

if s[i]

== s[j]

: dp[i]

[j]=

1else

:if s[i]

== s[j]

and dp[i+1]

[j-1]==

1:dp[i]

[j]=

1## 記錄最大值

if dp[i]

[j]==

1and j - i > max_length:

max_length = j - i

start = i

print

(s[start:start + max_length+1]

) sys.exit(

)

時間複雜度:o(n^2)

空間複雜度:o(n^2)

5 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 方法1 用馬拉車演算法 字串動態規劃 來求最長回文子串時間複雜度可以達到o n 但是部落格裡面有個小失誤 這個id應該不是最大回文...

5 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb class solution def longestpalindrome self,s k len s olist...

5 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 這道題比較船艇的應該是dp求法,但鄙人的dp特別特別的差勁。所以我選用中心擴充套件演算法,掃一遍所有節點,把被掃...