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

Longest Common Prefix in String Array in Java

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

我的方法是匹配字符串数组中所有单词的第一个字符,如果所有单词都有相似的第一个字符,那么它移动到第二个字符,否则函数 returns 字符串。

如果有人帮我找出我的代码失败的测试用例,我将不胜感激。以下是我写的代码:

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;
    }

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

试试这个方法。

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.

完成了这项工作

试试这个:

private static String findPrefix(String[] prefixes) {
        String res = "";

        if (prefixes.length == 0) return res;

        for (int i = 0; i < prefixes.length; i++) {
            char[] chars1 = prefixes[i].toCharArray();

            for (int j = i+1; j < prefixes.length; j++) {
                //break if itself
                if (i == j) continue;
                char[] charsMatch = null;
                char[] chars2 = prefixes[j].toCharArray();

                if (chars1.length > chars2.length) {
                    for (int y = 0; y < chars2.length; y++) {
                        if (chars2[y] == chars1[y]) {
                            if (charsMatch == null) {
                                charsMatch = new char[chars2.length];
                            }
                            charsMatch[y] = chars1[y];
                        }
                    }
                } else {
                    for (int y = 0; y < chars1.length; y++) {
                        if (chars2[y] == chars1[y]) {
                            if (charsMatch == null) {
                                charsMatch = new char[chars1.length];
                            }
                            charsMatch[y] = chars1[y];
                        }
                    }
                }

                if (charsMatch != null && res.length() < charsMatch.length) {
                    res = new String(charsMatch);
                }
            }
        }

        return res;
    }