Java字符串数组中最长的公共前缀

时间:2020-08-23 17:43:37

标签: java arrays string character prefix

我正在尝试使用java在字符串数组中找到最长的公共前缀。以下是我的解决方案,但是当我将其上传到leetcode时,它失败了,我不知道它在哪个测试用例中失败了。我测试过的所有测试用例都可以正常工作。

我的方法是匹配字符串数组中所有单词的第一个字符,如果所有单词的第一个字符相似,则移至第二个字符,否则函数返回字符串。

如果有人帮助我确定代码失败的测试用例,我将非常感激。以下是我编写的代码:

public static String LongCommonPrefix(String[] strs)
    {
        String commonPrefix="";
        int count=0, k=0;
        
        if(strs.length>0)
        {
            for(int i=0; i<strs[0].length(); i++)
            {
                int j=1;
                while(j<strs.length)
                {
                    if(strs[0].charAt(k)==strs[j].charAt(k))
                    {
                        count++;
                        j++;
                    }
                    else
                        break;
                }
                if(count==strs.length-1)
                {
                    commonPrefix+=strs[0].charAt(k);
                    count=0;
                    k++;

                }
                else
                {
                    return commonPrefix;
                }

            }
        }

        return commonPrefix;
    }

2 个答案:

答案 0 :(得分:0)

代码中的错误是在您使用的部分中,未检查变量(K)可能大于数组的字符串长度(j)。 要解决此问题,在使用变量(K)之前添加条件语句就足够了。 祝你好运

答案 1 :(得分:0)

尝试这种方法。

public static String longestCommonPrefix(String[] s) {
    if (s.length == 0) return "";
    
    String prefix = s[0];
    for (int i = 1; i < s.length; i++) {
        while (s[i].indexOf(prefix) != 0) {
            prefix = prefix.substring(0, prefix.length() - 1);
            if (prefix.equals("")) return "";
        }
    }
    return prefix;
}

我已经通过以下方式对此进行了检查:

String[] arr = {"giorgi", "gio", "gior", "giorg", "gior"};
System.out.println(longestCommonPrefix(arr));

通过打印 gio 可以很好地完成工作。