給定乙個字串 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...