LeetCode 5 最長回文子串

2021-09-07 15:12:43 字數 1703 閱讀 7350

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

示例 1:

輸入: 「babad」

輸出: 「bab」

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

示例 2:

輸入: 「cbbd」

輸出: 「bb」

首先通過兩次遍歷字串,將字元進行相互比較,同時判斷是否為最長的子串,當為最長的子串時,進行的賦值。

(1)第一次嘗試

class solution:

def longestpalindrome(self, s):

""":type s: str

:rtype: str

"""temp1=''

numax=0

for i in range(len(s)):

for j in range(len(s)):

if (s[i] == s[j]):

if ((j-i+1)>numax):

numax = j-i+1

temp1=''

for k in range(i,j+1):

temp1 = temp1 + s[k]

return temp1

報錯結果:

輸入:

"abcda"

輸出:"abcda"

預期:"a"

(2)參***

class solution:

def longestpalindrome(self, s):

""":type s: str

:rtype: str

"""# 使用動態規劃,用空間換時間,把問題拆分

# 獲取字串s的長度

str_length = len(s)

# 記錄最大字串長度

max_length = 0

# 記錄位置

start = 0

# 迴圈遍歷字串的每乙個字元

for i in range(str_length):

# 如果當前迴圈次數-當前最大長度大於等於1 並 字串[當前迴圈次數-當前最大長度-1:當前迴圈次數+1] == 取反後字串

if i - max_length >= 1 and s[i-max_length-1: i+1] == s[i-max_length-1: i+1][::-1]:

# 記錄當前開始位置

start = i - max_length - 1

# 取字串最小長度為2,所以+=2,s[i-max_length-1: i+1]

max_length += 2

continue

# 如果當前迴圈次數-當前最大長度大於等於0 並 字串[當前迴圈次數-當前最大長度:當前迴圈次數+1] == 取反後字串

if i - max_length >= 0 and s[i-max_length: i+1] == s[i-max_length: i+1][::-1]:

start = i - max_length

# 取字串最小長度為1,所以+=1,s[i-max_length: i+1]

max_length += 1

# 返回最長回文子串

return s[start: start + max_length]

LeetCode5最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s長度最長為1000。示例 輸入 babad 輸出 bab 注意 aba 也是有效答案示例 輸入 cbbd 輸出 bb 動態規劃來做,每個回文字串的子字串也是回文字串,即string是回文字串那麼它的string.substring 1,lenth ...

LeetCode 5 最長回文子串

問題描述 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 解決方案 中心擴充套件演算法 事實上,只需使用恆定的空間,我們就可以在 o n 2 的時間內解決這個問題...

leetcode5 最長回文子串

遞推式 1 一般 s i 1 s j 1 and j i and j i len s i 1,j 1 2 初始化dp矩陣對角線的值為 true,相鄰兩個元素相等時dp i i 1 為true 初始化回文串起始位置和長度。def longestpalindrome s n len s if s ret...