給定乙個字串 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特別特別的差勁。所以我選用中心擴充套件演算法,掃一遍所有節點,把被掃...