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

LeetCode最长公共前缀解法疑问:为何用strs[i].indexOf(output) != 0?

最长公共前缀解法中indexOf条件的解释

先明确Java里String.indexOf(str)的行为:它返回参数str在当前字符串中第一次出现的起始索引,如果完全找不到str就返回-1。

代码里的strs[i].indexOf(output) != 0这个条件,核心是判断当前的output是不是strs[i]的前缀:

  • 当indexOf(output) == 0时,说明output刚好从strs[i]的第一个字符开始匹配,也就是output是strs[i]的前缀,这时候就不用再截断output了。
  • 当indexOf(output) != 0时,分两种情况:
    • 第一种:output比strs[i]长,或者output的内容和strs[i]的开头完全不匹配,这时候indexOf返回-1,说明output不可能是strs[i]的前缀;
    • 第二种:output在strs[i]的中间位置出现,但不是从开头开始(比如output是"low",strs[i]是"flower",indexOf返回3),这也说明output不是strs[i]的前缀。

只要满足!=0,就说明当前的output不符合要求,需要把它从末尾截短一位,再重新判断,直到output成为strs[i]的前缀为止。

举个实际例子理解:
假设输入数组是["flower","flow","flight"]:

  1. 初始output = "flower"
  2. 处理第二个字符串"flow":
    • "flow".indexOf("flower")返回-1,满足!=0,截断成"flowe"
    • 再次判断,"flow".indexOf("flowe")还是-1,截断成"flow"
    • 现在"flow".indexOf("flow")返回0,退出while循环
  3. 处理第三个字符串"flight":
    • "flight".indexOf("flow")返回-1,截断成"flo"
    • 再次判断,"flight".indexOf("flo")返回-1,截断成"fl"
    • 现在"flight".indexOf("fl")返回0,退出while循环
  4. 最终返回"fl",也就是所有字符串的最长公共前缀。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:15:28