leetcode_演算法_5_最長迴文字元
阿新 • • 發佈:2022-03-11
題目描述
給你一個字串 s,找到 s 中最長的迴文子串。
程式碼部分
class Solution: def CenterExtend(self,left,right,s): # ``` # 引數: # left,right :目前擴充套件的字元的兩邊,需要進行比較兩個是否相同 # s:字串 # 作用:返回最長迴文的左右節點 # ``` while left >= 0 and right < len(s) and s[left] == s[right]: #滿足迴文條件,開始向兩邊擴充套件 left -= 1 right += 1 return left + 1,right - 1 #加減1是因為當前需要比較的兩個節點不滿足迴文條件,所以需要返回到上一次比較的節點 def longestPalindrome(self, s: str) -> str: # ``` #引數: # s : 需要判斷的字串 # 作用 :返回s中最長的迴文字元 # 利用中心向兩邊擴散的思想去比較。迴文字元有奇數迴文和偶數迴文兩種方式,兩種方式要分別去進行判斷。 # 編寫CenterExtend()函式來判斷確定了迴文中心字元的最大回文數,並返回左右節點 # ``` start,end = 0,0 #儲存左右節點 for i in range(len(s)): #分兩種情況進行比較 left1,right1 = self.CenterExtend(i,i,s) left2,right2 = self.CenterExtend(i,i+1,s) # 進行長度比較,更新start和end if right1 - left1 > end - start: start,end = left1,right1 if right2 - left2 > end - start: start, end = left2, right2 return s[start:end+1] # 加一是因為python顯頭不顯尾