leetCode第五題 最長回文子串

2021-10-08 09:27:22 字數 1506 閱讀 4404

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

用例:

輸入: 「babad」

輸出: 「bab」

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

輸入: 「cbbd」

輸出: 「bb」

本題採用動態規劃演算法進行題解,關於動態規劃可以查詢一些關於他的資料,本題目屬於比較簡易的規劃演算法,只要找到本題目適應的公式即可

這裡假設p(i,j)是字串中由第i位到第j位組成的子字串,那麼pij是回文串的前提就是p(i+1,j-1)是回文串,並且,si與sj相同,用公式即可如下表示:

當字串為空時直接返回

當字串的位數為1時,是回文串,直接返回

當字串的位數為2時,如果si == sj的話,字串是回文串,直接返回

其餘的情況就利用上述的公式即可

具體的實現**

class

solution

:def

longestpalindrome

(self, s:

str)

->

str:

# 記錄字串的長度

n =len(s)

# 初始化二維陣列 其中存放false 隨著動態規劃慢慢進行更改

list_double =[[

false

]* n for _ in

range

(n)]

son_str =

""for i in

range

(n):

for j in

range

(n):

m = i + j

if m >= n :

break

if i ==0:

list_double[j]

[m]=

true

elif i ==1:

list_double[j]

[m]=

(s[j]

== s[m]

)else

: list_double[j]

[m]=

(list_double[j+1]

[m-1

]and

(s[j]

== s[m]))

if(list_double[j]

[m]==

true

)and

(m - j +

1>

len(son_str)):

son_str = s[j:m+1]

return son_str

值得一提的是本演算法的空間複雜度略高,將二維陣列進行填充,需要o(n^2)

LeetCode第五題最長回文子串

leetcode第五題最長回文子串 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。輸入 cbbd 輸出 bb 解題思路 我們可以用動態規劃演算法來解答此題,定義乙個dp二維陣列dp i j d...

leetcode第五題 尋求最長回文子串

1.思路 1.暴力解法 直接遍歷,兩頭收縮。class solution int maxlen 1 int begin 0 char chararray s.tochararray for int i 0 i return s.substring begin,begin maxlen 驗證是否為回文...

leetcode第五題 最長回文子字串

題目 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 中心擴充套件演算法 回文中心的兩側互為映象。因此,回文可以從它的中心展開,由於所含字母數為偶數的回文的中心...