題目:給定乙個字串 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 中心擴充套件演算法 回文中心的兩側互為映象。因此,回文可以從它的中心展開,由於所含字母數為偶數的回文的中心...