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显头不显尾
posted @ 2022-03-11 09:57  佰貳  阅读(23)  评论(0编辑  收藏  举报