1. 程式人生 > 其它 >leetcode_演算法_5_最長迴文字元

leetcode_演算法_5_最長迴文字元

題目描述

給你一個字串 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顯頭不顯尾