LeetCode Task17.最长回文子串

题目

5. 最长回文子串
在这里插入图片描述

解答

代码

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        if len(s)==1 or len(s)==0:
            return s
        if len(s)==2:
            if s[0]==s[1]:
                return s
            else:
                return s[0]
        ra=s[0]#记录奇数回文子串
        rb=s[0]#记录偶数回文子串
        for i in range(1,len(s)-1):
            ep=1 #扩展范围expand
            while i-ep>=0 and i+ep<len(s) and s[i-ep]==s[i+ep]:
                if 2*ep+1>len(ra):
                    ra=s[i-ep:i+ep+1]
                ep+=1
        for j in range(0,len(s)-1):   
            if s[j]==s[j+1]:
                if len(rb)<=2:
                    rb=s[j:j+2]
                epd=1
                while j-epd>=0 and j+epd+1<len(s) and s[j-epd]==s[j+epd+1]:
                    if 2*epd+2>len(rb):
                        rb=s[j-epd:j+epd+2]
                    epd+=1
        if len(ra)>len(rb):
            return ra
        else:
            return rb      

思路

  • 特殊情况:
    • s长度为0、1时:
      返回其自身
    • s长度为2时:
      相同:返回自身
      不同:任意返回一个子串(此代码取第一个)
  • 一般情况(中心扩展法):
    • for寻找奇数回文子串
      遍历中心,在检索范围内且两边相等的前提下
      用ep不断向外扩展,并且记录满足条件的最长子串ra
    • for寻找偶数回文子串
      同理,只是中心改为两个连在一起的相同字母。epd扩展,rb记录
    • 对比ra、rb
      返回最长的回文子串

结果

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值