給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。
示例 1:
輸入: "babad"示例 2:輸出: "bab"
注意: "aba"也是乙個有效答案。
輸入: "cbbd"方法一 動態規劃:對於字串str,假設dp[i,j]=1表示str[i...j]是回文子串,那個必定存在dp[i+1,j-1]=1。這樣最長回文子串就能分解成一系列子問題,可以利用動態規劃求解了。首先構造狀態轉移方程輸出: "bb"
上面的狀態轉移方程表示,當str[i]=str[j]時,如果str[i+1...j-1]是回文串,則str[i...j]也是回文串;如果str[i+1...j-1]不是回文串,則str[i...j]不是回文串。
初始狀態
上式的意義是單個字元,兩個相同字元都是回文串。
我們只需要陣列的右上部分,首先將陣列初始化為全0陣列arr = [[0 for col in range(l)] for row in range(l)]
注意計算順序為斜向計算
例如:綠色為初始化順序,紅色為計算順序
陣列初始化11#
l * l arr[i][j]表示i-j是否為回文串, 陣列只使用右上部分12#
首先,所有的單個字元均為回文串
13for i in
range(l):
14 arr[i][i] = 115#
其次,兩個字元的
16for i in range(l-1):
17if s[i] == s[i+1]:
18 arr[i][i+1] = 1
19 start, longest = i, 2
2021
for i in range(3, l+1):#
回文串的長度
22for j in range(l-i+1):23#
[j][j+l-1]
24if s[j] == s[j+i-1] and arr[j+1][j+i-2] == 1:
25 arr[j][j+i-1] = 1
26 start, longest =j, i
2728
29return s[start:start+longest]
最長回文子串 LeetCode 五 最長回文子串
題目 最長回文子串 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。題目解析 回文?當回文串長度為奇數時,比如 北京計程車租出京北 當回文串長度為偶數的時候,比如 1221 以上兩種情況有乙個共同的特點就是有乙個中心,那在 中如何表示中心呢?class solution ...
leetcode 最長回文子串
給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 中心拓展法 由乙個中心點開始向兩邊拓展,檢測邊界,判斷兩個值是否相等,相等則繼續拓展下去,檢測邊界。1....
最長回文子串(LeetCode)
給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb class solution def longestpalindrome self,s type s str r...