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

Python实现最长公共前缀时出现string index out of range错误

解决最长公共前缀代码的索引越界问题

你的代码触发IndexError的核心原因是:内层循环的范围是提前计算好的,但循环过程中long_comm被截断变短,后续的j值会超出新的字符串长度。

错误细节拆解

以处理第二个元素"flow"为例:

  1. 初始long_comm是"flight"(长度6),计算min(len("flow"), len("flight"))得到4,所以内层循环j从0到3。
  2. 当j=2时,"flow"[2]是"o","flight"[2]是"i",两者不匹配,于是long_comm被截断为"fl"(长度仅为2)。
  3. 循环继续执行到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:36:59