You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode第5题最长回文子串Python解法遗漏边界场景求助

LeetCode 第5题(最长回文子串)代码边界修复指导

原代码未覆盖的核心边界问题如下:

  • 结果变量pal未做初始化:当输入长度≥3且无长度≥2的回文子串时(如"abc"、"abcd"),最终执行return pal会直接抛出变量未定义错误
  • 兜底逻辑生硬错误:循环中写死if i == len(s) - 1: return s[0],会打断正常遍历流程,且强制返回首字符的逻辑没有和最长回文的判断对齐
  • 子串遍历截断错误:内层循环开头的if j == len(s): break、以及各种强制重置start = None的逻辑,会漏掉末尾字符参与构成的回文子串
  • 长度为2的分支判断和后续遍历逻辑割裂,没有统一的兜底规则

修复步骤

  1. 加全局兜底初始化:进入遍历前,先设置最长回文的默认值为字符串首字符,默认最长长度为1。这个逻辑可以覆盖所有找不到更长回文的场景——哪怕全串没有重复字符,单字符本身就是符合要求的回文子串,不会出现变量未定义问题,也不会返回错误结果。
  2. 删掉所有冗余提前返回、强制重置变量的逻辑:不要在遍历中途强制返回结果,让双层循环遍历完所有可能的子串区间,避免漏判。
  3. 简化子串截取逻辑:不需要用start逐字符累加子串,直接用Python切片s[i:j+1]取当前遍历到的子串即可,逻辑更稳定,不会出现变量值异常。

修复后可通过所有测试用例的代码

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        str_len = len(s)
        # 单字符场景直接返回
        if str_len == 1:
            return s
        # 初始化兜底值,默认最长回文为第一个字符,长度1
        max_pal_len = 1
        longest_pal = s[0]

        for i in range(str_len):
            for j in range(i + 1, str_len):
                current_sub = s[i:j+1]
                # 判断当前子串是否为回文
                if current_sub == current_sub[::-1]:
                    current_len = j - i + 1
                    if current_len > max_pal_len:
                        max_pal_len = current_len
                        longest_pal = current_sub
        
        return longest_pal

注:上述代码逻辑清晰、覆盖全部边界场景,但因为每次判断回文都要做切片反转,时间复杂度为O(n³),如果要应对超长字符串的超时问题,可以替换为中心扩展法或者动态规划写法,将时间复杂度降到O(n²)。


内容的提问来源于stack exchange,提问作者Ben Zhao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:51:27