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

编写最长公共前缀函数时无法获取JavaScript数组第二个元素

问题分析与修复

你的代码存在几个关键问题:

  • 循环越界导致secondWord获取失败:原循环for (var i = 0; i < strs.length; i++)会让i遍历到数组最后一个元素,此时strs[1+i]超出数组索引范围变成undefined,自然拿不到目标元素。而且你本意是两两对比相邻字符串,循环应该只执行到strs.length - 1。
  • 逻辑不符合需求:用indexOf判断字符是否存在完全搞错了“最长公共前缀”的定义——公共前缀是从开头开始的连续相同字符,不是任意位置存在相同字符;一旦发现不匹配就清空word的逻辑也不对,应该停止当前字符的对比。
  • 变量未定义报错:else分支里使用了store1,但这个变量仅在if分支的循环内定义,运行时会抛出未定义错误。

修复后的代码:

var longestCommonPrefix = function(strs) {
  // 处理空数组的边界情况
  if (strs.length === 0) return "";
  // 以第一个字符串作为初始基准前缀
  let prefix = strs[0];
  // 和数组中每个后续字符串逐一对比
  for (let i = 1; i < strs.length; i++) {
    // 循环缩短前缀,直到当前字符串以该前缀开头
    while (strs[i].indexOf(prefix) !== 0) {
      prefix = prefix.slice(0, prefix.length - 1);
      // 如果前缀被删空,直接返回空字符串
      if (prefix === "") return "";
    }
  }
  return prefix;
};

测试验证

用你提供的测试数组strs = ["flower", "flow", "character"]:

  • 先以"flower"为前缀和"flow"对比,因"flow"开头不是"flower",前缀逐步缩短为"flow",此时匹配成功。
  • 再用"flow"和"character"对比,发现无匹配开头,前缀不断缩短直至为空,最终返回"",符合三个字符串无公共前缀的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:22:42