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

LeetCode提交报错:'NoneType' object is not iterable问题求助

问题排查:LeetCode最长无重复子串代码报错分析

报错直接原因

你遇到的TypeError: 'NoneType' object is not iterable错误,核心是select_list(s)函数在部分场景下返回了None,而max()函数要求传入可迭代对象(比如列表),传入None直接触发该错误。

具体代码问题点

1. select_list函数缺少默认返回值

看select_list的代码:

def select_list(st):           
    list2 = []
    list2.append(select(st))
    if len(st) > 1:
        st = (st[len(select(st))::])
        list2.append(select(st))
        return list2

当输入的st长度≤1时(比如空字符串、单字符字符串),代码不会进入if len(st) >1分支,函数没有显式return语句,Python会默认返回None。此时max(select_list(s))等价于max(None),直接引发报错。

2. select函数在无重复字符时返回None

select函数仅在遇到重复字符时返回list1,但如果输入字符串所有字符都不重复(比如"abc"),遍历结束后没有触发else分支,函数同样无显式return,会返回None。这会导致list2中被添加None元素,后续计算max时也会出问题。

3. select_list的逻辑不完整

当前select_list仅处理两次select调用,完全覆盖不了所有可能的无重复子串场景。比如对"abcabcbb",你只取了前两个无重复子串,但实际需要遍历每个起始位置,生成所有可能的无重复子串才能找到最长的那个。

修复建议(基础版本)

先解决报错问题,再完善逻辑:

  1. 给select函数添加默认返回,遍历结束后返回收集到的列表:
def select(s):
    list1 = []
    for i in s:
        if i not in list1:
            list1.append(i)
        else:
            return list1
    return list1  # 遍历完所有字符后返回完整列表
  1. 给select_list添加默认返回,同时修改逻辑遍历所有可能的子串:
def select_list(st):           
    list2 = []
    current_st = st
    while len(current_st) > 0:
        sub = select(current_st)
        list2.append(sub)
        # 从重复字符的下一位开始新的子串遍历
        if len(sub) < len(current_st):
            dup_pos = current_st.index(sub[-1], len(sub))
            current_st = current_st[dup_pos+1:]
        else:
            break
    return list2
  1. 计算最长长度时处理空输入场景:
sub_lengths = [len(sub) for sub in select_list(s)]
result = max(sub_lengths, default=0)
return result

如果追求更优性能,推荐使用滑动窗口算法,避免生成所有子串,降低时间复杂度。

内容的提问来源于stack exchange,提问作者Dmitry Trump

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:31:17