解題思想
1.中心擴充套件法
從字串中心分別往左右兩端移動, while l>=0 r易混點: 回文串的起始值 = i-(迴圈中回文串的長度-1)//2 看不懂找數帶入即可
class
solution
:def
longestpalindrome
(self, s:
str)
->
str:
n =len(s)
defgetlen
(l,r)
:while l>=
0and r== s[r]
: l -=
1 r +=
1return r-l-
1 start =
0 length =
0for i in
range
(n):
cur =
max(getlen(i,i)
, getlen(i,i+1)
)if cur <=length:
continue
length = cur
start = i -
(cur-1)
//2return s[start:start+length]
2.動態規劃法
動態規劃經典題目:斐波那契數列,揹包問題
動態規劃常用來解決 重疊子問題
一般遞迴可解決的,用動態規劃會減小複雜度
class
solution
:def
longestpalindrome
(self, s:
str)
->
str:
n=len(s)
dp =[[
0]*n for _ in
range
(n)]
ans =
""for l in
range
(n):
for i in
range
(n):
j = i + l
if j >=
len(s)
:break
if l ==0:
dp[i]
[j]=
true
elif l ==1:
dp[i]
[j]=
(s[i]
== s[j]
)else
: dp[i]
[j]=
(dp[i +1]
[j -1]
and s[i]
== s[j]
)if dp [i]
[j]and l +
1>
len(ans)
: ans = s[i:j+1]
return ans
LeetCode5 最長回文串
include include include include include include using namespace std ifndef solution h define solution h 思路 從回文串的對稱點開始,依次向左向右比較,不相同的時候停止遍歷,直到找出最大的長度的回文...
LeetCode 5 最長回文串
目錄 1.題目描述 2.解決方案 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 方法一 動態規劃 演算法 用二位陣列來標記字串從下標 i 到下標 j 是否為回...
LeetCode5最長回文子串
給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 動態規劃來做,每個回文字串的子字串也是回文字串,即string是回文字串那麼它的string.substring 1,lenth ...