LeetCode5 最长回文串
发布日期:2021-05-14 23:53:06 浏览次数:16 分类:精选文章

本文共 1337 字,大约阅读时间需要 4 分钟。

为了找到给定字符串中最长的回文子串,可以使用中心扩展法。这种方法通过以每个字符或字符对为中心,向两边扩展,找到最长的回文子串。以下是详细的解决方案:

方法思路

中心扩展法的基本思路是对每个字符(单独作为中心)和每对相邻字符(作为中心)向外扩展,检查是否形成回文。具体步骤如下:

  • 初始化:创建一个数组max_len来记录每个位置的最大回文长度。
  • 遍历每个字符:对于每个字符,分别处理奇数长度和偶数长度的回文。
  • 扩展检查:对于每个中心,向左右两边扩展,直到字符不匹配或超出字符串范围。
  • 记录最大长度:在每次扩展后,更新最大回文长度和对应的子串。
  • 这种方法的时间复杂度为O(n^2),其中n是字符串的长度。对于长度为1000的字符串,性能是可以接受的。

    解决代码

    def longestPalindrome(s):
    n = len(s)
    if n == 0:
    return ""
    max_len = 0
    result = s[0] if n >= 1 else ""
    for i in range(n):
    # 处理奇数长度的回文
    l, r = i, i
    while l >= 0 and r < n and s[l] == s[r]:
    l -= 1
    r += 1
    current_len = r - l - 1
    if current_len > max_len:
    max_len = current_len
    result = s[i:i + current_len]
    # 处理偶数长度的回文
    if i < n - 1:
    l, r = i, i + 1
    while l >= 0 and r < n and s[l] == s[r]:
    l -= 1
    r += 1
    current_len = r - l - 1
    if current_len > max_len:
    max_len = current_len
    result = s[i:i + current_len]
    return result

    代码解释

  • 初始化max_len数组初始化为0,result记录最长回文子串。
  • 遍历每个字符:外层循环遍历字符串中的每个字符,作为中心。
  • 奇数长度扩展:以当前字符为中心,向左右扩展,计算当前回文的长度,并更新最大长度和结果。
  • 偶数长度扩展:如果当前字符不是最后一个字符,以当前字符和下一个字符为中心,向外扩展,同样更新最大长度和结果。
  • 返回结果:遍历完成后,返回最长回文子串。
  • 这种方法高效且简洁,能够在合理时间内处理长度较大的字符串,确保结果正确。

    上一篇:LeetCode258 各位相加(弃九法)
    下一篇:LeetCode3 无重复字符的最长子串(双指针,哈希,贪心)

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月20日 19时05分13秒