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

LeetCode strStr函数报错TypeError:返回值为None的原因解析

为什么我的strStr实现返回None导致类型错误?

错误原因

你遇到的TypeError是因为函数在某些场景下没有返回符合要求的整数值,默认返回了None,而LeetCode题目要求必须返回整数(找到则返回索引,找不到返回-1)。

具体来说,你的代码逻辑存在两个核心问题:

  1. 循环范围未覆盖所有可能的索引:
    你写的range(0, len(haystack) - len(needle), 1)是左闭右开区间,这会漏掉最后一个合法的起始索引。比如当haystack长度为5、needle长度为2时,len(haystack)-len(needle)等于3,range只会生成0、1、2这三个索引,但最后一个合法的起始索引是3(对应子串haystack[3:5])。如果needle恰好出现在这个位置,循环里不会触发return,函数就会返回None。

  2. 子串判断逻辑冗余且不准确:
    用needle in haystack[i:i+len(needle)]判断完全多余——因为haystack[i:i+len(needle)]的长度和needle完全一致,直接判断两者是否相等haystack[i:i+len(needle)] == needle才是正确的逻辑,用in在这里没有意义,还可能引入不必要的判断。

修正后的代码

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        # 处理空needle的特殊情况(题目通常要求空串返回0)
        if not needle:
            return 0
        
        needle_len = len(needle)
        haystack_len = len(haystack)
        
        # 如果needle比haystack长,直接返回-1
        if needle_len > haystack_len:
            return -1
        
        # 循环覆盖所有合法的起始索引,包含最后一个可能的索引
        for i in range(haystack_len - needle_len + 1):
            if haystack[i:i+needle_len] == needle:
                return i
        
        # 循环结束未找到匹配,返回-1
        return -1

内容的提问来源于stack exchange,提问作者Alex Itenberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:11