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。
二、代码完整运行逻辑
这段代码的核心思路是逐步缩小公共前缀的范围,具体步骤如下:
- 初始化:把数组第一个字符串作为初始公共前缀
prefix - 遍历数组中剩余的每个字符串:
- 对每个字符串,检查当前
prefix是否是它的前缀 - 如果不是(即
indexOf(prefix) !=0),就把prefix截短一位(去掉最后一个字符),重复检查 - 如果截到
prefix为空,说明没有公共前缀,直接返回空串
- 对每个字符串,检查当前
- 遍历完所有字符串后,剩下的
prefix就是最长公共前缀
三、用你的例子模拟运行
以数组["ale", "altamonte", "alligator"]为例:
- 初始
prefix = "ale" - 处理第二个字符串
"altamonte":"altamonte".indexOf("ale")返回-1(找不到"ale"),进入循环prefix截短为"al""altamonte".indexOf("al")返回0("al"是开头前缀),退出while循环
- 处理第三个字符串
"alligator":"alligator".indexOf("al")返回0,不进入循环
- 最终返回
"al",符合预期
四、补充说明
如果遇到大小写不匹配的情况(比如你的例子里是"Altamonte"),"Altamonte".indexOf("ale")也会返回-1,同样会触发循环截短prefix直到匹配或为空。
内容的提问来源于stack exchange,提问作者Altoids weed
相关产品推荐
相关产品推荐

