LeetCode 最長回文子串

2022-08-28 17:18:17 字數 1751 閱讀 3004

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

示例 1:

輸入: "babad"

輸出: "bab"

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

示例 2:

輸入: "cbbd"

輸出: "bb"

方法一 動態規劃:對於字串str,假設dp[i,j]=1表示str[i...j]是回文子串,那個必定存在dp[i+1,j-1]=1。這樣最長回文子串就能分解成一系列子問題,可以利用動態規劃求解了。首先構造狀態轉移方程

上面的狀態轉移方程表示,當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...