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

LeetCode 14.最长公共前缀Python代码错误排查:测试用例未通过求助

问题分析与修正方案

你的代码存在几个关键问题,导致无法得到正确结果:

  • 初始前缀错误:你仅取了第一个字符串的首字符作为初始prefix,这直接限制了前缀最长只能是1个字符,自然无法得到"fl"这样的结果。正确的初始前缀应该是整个第一个字符串,之后再逐步缩短到公共部分。
  • 字符串不可变特性误解:Python中的字符串是不可变类型,没有pop()方法,你的代码实际运行会抛出AttributeError,只是在测试用例中还没执行到这一步就返回了错误结果。
  • 循环逻辑错误:对比逻辑混乱,应该逐个检查每个字符串与当前前缀的匹配情况,当发现不匹配时直接截断前缀,而不是尝试删除单个字符;同时不需要通过索引遍历字符串,直接遍历字符串本身更清晰。

修正后的代码(方法一:逐步缩短前缀)

from typing import List

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:  # 处理空列表的边界情况
            return ""
        
        prefix = strs[0]  # 以第一个字符串作为初始前缀
        for s in strs[1:]:  # 从第二个字符串开始逐一对比
            # 不断缩短前缀,直到当前字符串以该前缀开头
            while not s.startswith(prefix):
                prefix = prefix[:-1]
                if not prefix:  # 如果前缀被截空,直接返回空字符串
                    return ""
        return prefix

修正后的代码(方法二:逐字符对比)

这种方法更直观,逐个检查每个字符位置的一致性:

from typing import List

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        
        # 遍历第一个字符串的每个字符位置
        for char_idx in range(len(strs[0])):
            current_char = strs[0][char_idx]
            # 检查其他所有字符串在该位置的字符是否一致
            for s in strs[1:]:
                # 如果当前字符串长度不足,或字符不匹配,返回截止到当前位置的前缀
                if char_idx >= len(s) or s[char_idx] != current_char:
                    return strs[0][:char_idx]
        # 如果第一个字符串的所有字符都匹配,直接返回它
        return strs[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:00:59