leecode算法《14. 最长公共前缀》详解有注释,简单明了。

leecode算法《14. 最长公共前缀》详解有注释,简单明了。

原题内容

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 “”。

示例 1:

输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:

输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:

所有输入只包含小写字母 a-z 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

审题 :方法一:水平扫描法

leecode算法《14. 最长公共前缀》详解有注释,简单明了。_第1张图片
本质就是 s1和s2找到公共前缀跟s3比 ,在找到和s3的最小公共前缀跟s4比以此类推
本人代码:

    public static String longestCommonPrefix(String[] strs) {
        // 定义结果
        String result;
        // 如果数组长度为0。直接返回“”
        if (strs.length == 0) {
            return "";
        } else {
            // 假设最小公共前缀是s0
            result = strs[0];
            for (int i = 0; i < strs.length - 1; i++) {
                // 用来判断是否存在相同的公共前缀,只要有一个不存在直接返回“”
                boolean isHave = false;
                for (int j = 0; j < strs[i + 1].length(); j++) {
                    // 逐步截取下一个字符串
                    String substring = strs[i + 1].substring(0, strs[i + 1].length() - j);
                    // 如果result 是以截取的字符串开头,那么一定是最小公共字符串
                    if (result.startsWith(substring)) {
                        result = substring;
                        isHave = true;
                        // 跳出本次循环
                        break;
                    }
                }
                if (!isHave) {
                    return "";
                }
            }
        }
        return result;
    }

官方代码

    public static String longestCommonPrefix2(String[] strs) {
        if (strs.length == 0) {
            return "";
        }
        String prefix = strs[0];
        for (int i = 1; i < strs.length; i++) {
            // 当下一个字符不是prefix开头的继续循环
            while (strs[i].indexOf(prefix) != 0) {
                prefix = prefix.substring(0, prefix.length() - 1);
                if (prefix.isEmpty()) return "";
            }
        }
        return prefix;
    }

审题 :解法二还没写可以去看官方题解,非常nice

你可能感兴趣的:(算法)