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

LeetCode#14最长公共前缀相同测试用例提交结果错误排查

LeetCode 14. 最长公共前缀 提交结果异常

复现表现

  • 官方给出的两个示例运行结果均符合预期:
    • 示例1
      • 输入:strs = ["flower","flow","flight"]
      • 输出:"fl"
    • 示例2
      • 输入:strs = ["dog","racecar","car"]
      • 输出:""
      • 解释:输入的字符串之间不存在公共前缀
  • 异常表现:提交代码时,测试用例["ab", "a"]被判定输出为空字符串,与预期输出"a"不符;但在LeetCode平台单独自定义运行该测试用例、本地VSCode环境运行代码时,均能得到正确结果。

问题代码

var flag = false;

var longestCommonPrefix = function(strs) {
    if(strs.length==1)
        return strs[0];

    strs.sort(function(a,b){
        return a.length - b.length;
    });
    
    var str = ""
    for(var i=0; i<strs[0].length; i++){
        for(var j=0; j<strs.length; j++){
            if(strs[0][i] != strs[j][i]){
                flag = true;
                break;
            }
        }
        if(flag)
            break;
        str += strs[0][i];
    }
    return str;
};

console.log(longestCommonPrefix(["ab", "a"]));

问题原因

flag变量被声明在函数外部的全局作用域,LeetCode提交判题时会在同一个JavaScript上下文中按顺序执行所有测试用例,不会为每个用例重置全局变量:

  1. 当执行到存在字符不匹配的测试用例时,全局flag会被设置为true
  2. 后续执行["ab", "a"]用例时,flag初始值已经是true,进入第一层循环后会直接触发break逻辑,不会拼接公共前缀,最终返回空字符串
  3. 单独运行单个测试用例时,上下文是全新初始化的,flag初始值为默认的false,因此能得到正确结果

修复方案

将flag变量的声明移动到函数内部,保证每次调用函数时flag都会被初始化为false,修复后代码如下:

var longestCommonPrefix = function(strs) {
    if(strs.length==1)
        return strs[0];

    strs.sort(function(a,b){
        return a.length - b.length;
    });
    
    var str = ""
    for(var i=0; i<strs[0].length; i++){
        var flag = false;
        for(var j=0; j<strs.length; j++){
            if(strs[0][i] != strs[j][i]){
                flag = true;
                break;
            }
        }
        if(flag)
            break;
        str += strs[0][i];
    }
    return str;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:06:25