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

LeetCode最长无重复字符子串问题:b=s[0]引发运行时错误求排查

最长无重复字符子串代码问题分析

运行时错误的直接原因

  • 空字符串索引越界:当输入s是空字符串时,s[0]会直接抛出IndexError。你测试时可能没覆盖空串用例,但LeetCode的测试集包含这种情况,这就是提交报错的根源。

代码里的其他逻辑问题

除了上述致命错误,你的代码还有不少逻辑漏洞,会导致部分测试用例结果错误:

  1. 初始值未加入记录:一开始b = s[0],但没把这个初始子串加入h列表,比如输入"a"时,h是空的,最后靠max==0返回1,虽然结果对,但逻辑不严谨。
  2. 循环遗漏最后一个字符处理:循环里i < N-1的判断,会导致当i是最后一个索引时,直接执行else把b设为s[i],但没把这个子串加入h,如果最后一个字符是新的无重复子串,就会被遗漏。
  3. 返回值逻辑错误:当max==0时返回1,但如果输入是空串,正确返回值应该是0,这里会导致空串用例结果错误。
  4. 变量命名不规范:用了Python内置函数名max作为变量名,虽然不会报错,但容易混淆,不推荐。

修复后的代码

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        if not s:
            return 0
        max_len = 0
        current_sub = ""
        for char in s:
            if char not in current_sub:
                current_sub += char
                max_len = max(max_len, len(current_sub))
            else:
                # 截断到重复字符的下一位,再拼接当前字符
                idx = current_sub.index(char)
                current_sub = current_sub[idx+1:] + char
        return max_len

修复要点

  • 先处理空串,直接返回0,彻底避免索引越界问题。
  • 遍历每个字符时,动态维护当前无重复子串current_sub,不用额外存储所有子串,效率更高。
  • 遇到重复字符时,截断current_sub到重复位置之后,再加入当前字符,保证子串始终无重复。
  • 遍历过程中实时更新最大长度,不用事后遍历h列表统计。

内容的提问来源于stack exchange,提问作者Mark Heo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:48:19