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"]:
- 初始
output = "flower" - 处理第二个字符串
"flow":"flow".indexOf("flower")返回-1,满足!=0,截断成"flowe"- 再次判断,
"flow".indexOf("flowe")还是-1,截断成"flow" - 现在
"flow".indexOf("flow")返回0,退出while循环
- 处理第三个字符串
"flight":"flight".indexOf("flow")返回-1,截断成"flo"- 再次判断,
"flight".indexOf("flo")返回-1,截断成"fl" - 现在
"flight".indexOf("fl")返回0,退出while循环
- 最终返回
"fl",也就是所有字符串的最长公共前缀。
内容的提问来源于stack exchange,提问作者rickygrimes
相关产品推荐
相关产品推荐

