数据结构之最长回文子串

(leetcode刷题)

最长回文子串

  题目: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
  示例: 输入: "babad";输出: "bab""aba"
      输入:"cbbd";输出:"bb"
 

方法

  • 我的想法:根据回文的原理,从中心扩散到周围。若左边==右边,则左-1且右-1,继续寻找,否则返回已经寻找到的子串。
  • 分为两个部分寻找,奇数回文子串和偶数回文子串。
def longestPalindrome(self, s: str) -> str:
    slen = len(s)
    # 长度小于2或等于2的时候字符相同,则返回给定字符串
    if slen < 2 or (slen == 2 and s[0] == s[1]): return s
    final = s[0]
    for i in range(0, slen - 1):
        rep1 = rep2 = s[i]
        j = 1
        # 寻找奇数回文子串
        if s[i - j] == s[i + j] and i > 0:
            rep1 = s[i - j] + rep1 + s[i + j]
            j += 1
            while i - j >= 0 and i + j <= slen - 1 and s[i - j] == s[i + j]:
                rep1 = s[i - j] + rep1 + s[i + j]
                j += 1
        j = 1
        # 寻找偶数回文子串
        if s[i - j + 1] == s[i + j]:
            rep2 += s[i + 1]
            j += 1
            while i - j + 1 >= 0 and i + j <= slen - 1 and s[i - j + 1] == s[i + j]:
                rep2 = s[i - j + 1] + rep2 + s[i + j]
                j += 1
        if len(rep1) > len(final):
            final = rep1
        if len(rep2) > len(final):
            final = rep2
    return final

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值