Python计算最长无重复子串代码报错:输入aab返回值错误排查
代码逻辑问题分析
- 重复字符处理逻辑错误:遇到重复字符时直接清空当前子串变量
empty,且通过continue跳过了当前字符的拼接步骤,没有将触发重复的字符作为新子串的起始字符,导致新子串长度统计缺失首字符。 - 遗漏末尾子串统计:循环遍历结束后,没有将最后一个正在拼接的无重复子串的长度加入统计列表,若最长无重复子串出现在字符串尾部时会丢失有效统计项。
- 语法缩进错误:边界判断
if len(s)==0:下方的return 0未正确缩进,运行时会直接触发语法报错。
调试修正方案
核心修正点如下:
- 移除重复判断分支中的
continue语句,确保当前触发重复的字符可以被加入清空后的empty,作为新子串的起始 - 循环结束后主动将当前
empty的长度追加到统计列表list1中,避免遗漏尾部子串的统计 - 修正边界判断的缩进错误,保证语法合规
修正后的可运行代码:
s = 'aab' def longsubstring(s): if len(s) == 0: return 0 list1 = [] empty = '' for i in s: if i in empty: list1.append(len(empty)) empty = '' empty += i # 追加最后一段子串的长度 list1.append(len(empty)) return max(list1) print(longsubstring(s)) # 输出为2,符合预期
测试验证
- 输入
s = 'abcabcbb':输出3,符合预期 - 输入
s = 'aab':输出2,符合预期 - 输入
s = 'bbbbb':输出1,符合预期 - 输入
s = 'pwwkew':输出3,符合预期
内容的提问来源于stack exchange,提问作者Pawan
相关产品推荐
相关产品推荐

