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显头不显尾