数据结构之最长回文子串

(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

在这里插入图片描述

发布了60 篇原创文章 · 获赞 2 · 访问量 1468

猜你喜欢

转载自blog.csdn.net/qq_40160983/article/details/104900430