LeetCode 最長回文子串程式

2021-10-03 16:42:44 字數 2641 閱讀 4096

問題描述:給定乙個字串 s,找到 s 中最長的回文子串。

列舉所有的子串,判斷是否為回文串,儲存最長的回文串。

class

solution

:def

longestpalindrome

(self, s)

: len_subs =

0 sub_huiwen =

""for i in

range(0

,len

(s))

:for j in

range

(i+1

,len

(s))

: sub_s = s[i:j+1]

if self.ispalindromic(sub_s)

and len_subs<

len(sub_s)

: len_subs =

len(sub_s)

sub_huiwen = sub_s

return sub_huiwen

defispalindromic

(self,sub_s)

:for i in

range(0

,int

(len

(sub_s)/2

)):if sub_s[i]

!= sub_s[

len(sub_s)

-i-1]:

return

false

return

true

if __name__ ==

'__main__'

:#s="abcabcbb"

#s = "abcdcba"

#s = "babad"

#s = "cbbd"

solution1 = solution(

) lenth_hw = solution1.longestpalindrome(s)

print

(lenth_hw)

我們知道回文串一定是對稱的,所以我們可以每次迴圈選擇乙個中心,進行左右擴充套件,判斷左右字元是否相等即可。

:# 當回文串的元素個數為奇數時它的中心在第i個元素上

len1 = self.expandaroundcenter(s, i, i)

# 當回文串的元素個數為偶數時它的中心在第i個元素和第i+1個元素之間

len2 = self.expandaroundcenter(s, i, i+1)

res_len =

max(len1, len2)

print

("start="

,start)

print

("end="

,end)

print

("res_len="

,res_len)

# 經過計算之後以i(或i和i+1)為中心的回文串的長度大於之前所有的回文串長度

# 之前最長的回文串的起始標籤為start,終止標籤為end

# 所以要更新start和end,來記錄新的最長回文串

if res_len > end - start +1:

# 以start開始,end結束的回文串長度為end-start+1

start =

int(i-

int(

(res_len-1)

/2))

#start在中心往左半回文串長度的位置

end =

int(i+res_len/2)

#end在中心往右半個回文串長度的位置

return s[start:end+1]

# 中心擴充套件核心

defexpandaroundcenter

(self,s, left, right)

: l = left

r = right

while l >=

0and r <

len(s)

and s[l]

== s[r]

: l -=

1 r +=

1return r-l-

1if __name__ ==

'__main__'

:#s = "abcdcba"

#s = "babad"

s ="cbbd"

solution1 = solution(

) lenth_hw = solution1.longestpalindrome(s)

print

(lenth_hw)

最長回文子串 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...