LeetCode strStr函数报错TypeError:返回值为None的原因解析
为什么我的strStr实现返回None导致类型错误?
错误原因
你遇到的TypeError是因为函数在某些场景下没有返回符合要求的整数值,默认返回了None,而LeetCode题目要求必须返回整数(找到则返回索引,找不到返回-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。子串判断逻辑冗余且不准确:
用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
相关产品推荐
相关产品推荐

