Java `(strs[i].indexOf(prefix)!=0)`在find LongestCommonPrefix中

Java `(strs[i].indexOf(prefix)!=0)`在find LongestCommonPrefix中,java,Java,我把这样的解决方案读到了最长的时间 public String longestCommonPrefix(String[]strs){ 如果(strs.length==0)返回“”; 字符串前缀=strs[0]; 对于(int i=1;i

我把这样的解决方案读到了最长的时间

public String longestCommonPrefix(String[]strs){
如果(strs.length==0)返回“”;
字符串前缀=strs[0];
对于(int i=1;i
对于
while(strs[i].indexOf(prefix)!=0)
,如果
prefix
不为空,表达式将不断返回True


如何得出
prefix=prefix.substring(0,prefix.length()-1)的结论
,我假设
,而(strs[I].indexOf(prefix)!=0)
什么都没做。

这个算法的思想是:

  • 首先假设第一个单词是
    前缀
    ,然后我们将进行检查
    前缀是否是所有其他单词的前缀

  • 如果
    strs[i].indexOf(前缀)!=0
    表示它不是以
    前缀开头的。
    因此,我们应该减少一点前缀(去掉最后一个)
    字符),即:
    prefix=prefix.substring(0,prefix.length()-1)

  • 我们不断地这样做,使用所有选中的单词,或者前缀 被剪切成
    (这就是为什么它被称为
    水平扫描的原因)


  • 希望这对您有所帮助,如果您还有其他问题,请发表评论。:)

    此代码基本上从字符串列表中取出第一个字符串

    String prefix = strs[0];
    
    并从该字符串中删除最后一个字符

    prefix = prefix.substring(0, prefix.length() - 1);
    
    直到下一个字符串包含此子字符串

    while (strs[i].indexOf(prefix) != 0)
    
    对输入数组中的每个字符串重复此操作

    for (int i = 1; i < strs.length; i++)
    
    for(int i=1;i
    如果算法已成功验证
    strs[i].indexOf(前缀)!=0
    对于每个输入字符串,
    前缀
    是最长的子字符串,但不是最长的公共前缀


    正如您在注释中已经提到的,而不是检查
    strs[i].indexOf(前缀)!=0
    您应该使用
    strs[i].startsWith(prefix)
    作为while循环的条件。通过这种方式,您应该得到通用的前缀

    “至于while(strs[i].indexOf(prefix)!=0),如果前缀不为空,表达式将不断返回True”-不会,因为
    前缀
    在循环体中更改,如果为空,代码将返回。我不知道你在问什么-你能澄清你的问题吗?哈哈,
    strs[I].indexOf(前缀)!=0
    不是STR[i]。使用(前缀)
    启动,节省阅读java文档的时间。抱歉,我没有详细解释。实际上它的意思是:如果前缀不在str中,它将返回-1,否则它将返回索引。所以如果
    strs[i].indexOf(前缀)!=0
    ,意思是
    index==-1
    index>0
    ,与
    startwith
    正好相反,实际上java已经
    startwith
    api,您可以尝试一下,我想它也可以工作。
    for (int i = 1; i < strs.length; i++)