Python实现最长公共前缀时出现string index out of range错误
解决最长公共前缀代码的索引越界问题
你的代码触发IndexError的核心原因是:内层循环的范围是提前计算好的,但循环过程中long_comm被截断变短,后续的j值会超出新的字符串长度。
错误细节拆解
以处理第二个元素"flow"为例:
- 初始
long_comm是"flight"(长度6),计算min(len("flow"), len("flight"))得到4,所以内层循环j从0到3。 - 当
j=2时,"flow"[2]是"o","flight"[2]是"i",两者不匹配,于是long_comm被截断为"fl"(长度仅为2)。 - 循环继续执行到
j=3,此时long_comm只有2个字符,访问long_comm[3]自然触发索引越界。
修正后的代码
def longestCommon(strs: list): if not strs: # 处理空列表的边界情况 return "" long_comm = strs[0] for s in strs: min_len = min(len(s), len(long_comm)) for j in range(min_len): if s[j] != long_comm[j]: long_comm = long_comm[:j] break # 找到不匹配点后立即终止内层循环 else: # 若当前字符串完全匹配前缀,取更短的长度作为新前缀 long_comm = long_comm[:min_len] return long_comm print(longestCommon(["flight", "flow", "flood"]))
关键修正点
- 增加空列表判断,避免直接访问
strs[0]报错。 - 找到第一个不匹配字符后,用
break终止内层循环,防止后续j值访问被截断后的短字符串。 - 新增
else分支,处理当前字符串完全包含于long_comm前缀的情况(比如当前字符串更短,此时公共前缀应取该字符串的长度)。
运行结果
执行修正后的代码,最终返回的最长公共前缀为"fl",符合预期。
内容的提问来源于stack exchange,提问作者Simply Code
相关产品推荐
相关产品推荐

