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

Java最长公共前缀问题中while循环条件语句的疑问

最长公共前缀代码解析:while循环条件与运行逻辑

一、strs[i].indexOf(prefix) != 0 的含义

先明确Java中String.indexOf(String sub)的行为:

  • 该方法返回子串sub在当前字符串中首次出现的起始索引
  • 如果当前字符串不包含sub,返回-1

所以strs[i].indexOf(prefix) != 0的意思是:当前的prefix不是strs[i]的开头前缀。只有当prefix完全匹配strs[i]的起始部分时,indexOf才会返回0,此时退出while循环。

你打印出-1,说明当前的prefix在strs[i]中完全不存在,自然满足!=0的条件,会进入循环截短prefix。

二、代码完整运行逻辑

这段代码的核心思路是逐步缩小公共前缀的范围,具体步骤如下:

  1. 初始化:把数组第一个字符串作为初始公共前缀prefix
  2. 遍历数组中剩余的每个字符串:
    • 对每个字符串,检查当前prefix是否是它的前缀
    • 如果不是(即indexOf(prefix) !=0),就把prefix截短一位(去掉最后一个字符),重复检查
    • 如果截到prefix为空,说明没有公共前缀,直接返回空串
  3. 遍历完所有字符串后,剩下的prefix就是最长公共前缀

三、用你的例子模拟运行

以数组["ale", "altamonte", "alligator"]为例:

  1. 初始prefix = "ale"
  2. 处理第二个字符串"altamonte":
    • "altamonte".indexOf("ale")返回-1(找不到"ale"),进入循环
    • prefix截短为"al"
    • "altamonte".indexOf("al")返回0("al"是开头前缀),退出while循环
  3. 处理第三个字符串"alligator":
    • "alligator".indexOf("al")返回0,不进入循环
  4. 最终返回"al",符合预期

四、补充说明

如果遇到大小写不匹配的情况(比如你的例子里是"Altamonte"),"Altamonte".indexOf("ale")也会返回-1,同样会触发循环截短prefix直到匹配或为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:20:33