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

LeetCode最长公共前缀问题求助:测试用例["a","a","b"]未通过

解决LongestCommonPrefix测试用例["a","a","b"]的错误问题

你的代码在处理测试用例["a","a","b"]时返回'a',但正确输出应为"",核心问题出在逻辑设计上:

  • 仅相邻比较而非全局验证:代码只检查相邻两个字符串的当前字符是否相同,就将该字符加入公共前缀,没有验证所有字符串的对应位置是否一致。比如测试用例中,前两个字符串第0位是'a',但第三个字符串第0位是'b',代码却未检查这一点。
  • 循环终止条件错误:当处理到第二个字符串(i=1)时,j已等于最短字符串的长度,直接返回了已累加的前缀,跳过了对第三个字符串的验证。

修正方案一:纵向扫描(逐个字符验证所有字符串)

def longestCommonPrefix(self, strs):
    """
    :type strs: List[str]
    :rtype: str
    """
    if not strs:
        return ""
    
    # 以第一个字符串为基准,遍历每个字符位置
    for j in range(len(strs[0])):
        current_char = strs[0][j]
        # 检查其他所有字符串的第j位是否一致
        for i in range(1, len(strs)):
            # 若当前字符串长度不足,或字符不匹配,返回前j位
            if j >= len(strs[i]) or strs[i][j] != current_char:
                return strs[0][:j]
    # 所有字符都匹配,返回基准字符串
    return strs[0]

修正方案二:横向扫描(逐步缩小公共前缀)

def longestCommonPrefix(self, strs):
    """
    :type strs: List[str]
    :rtype: str
    """
    if not strs:
        return ""
    
    prefix = strs[0]
    for s in strs[1:]:
        # 不断缩短prefix,直到它是当前字符串的前缀
        while not s.startswith(prefix):
            prefix = prefix[:-1]
            if not prefix:
                return ""
    return prefix

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:05:24