【LeetCode-简单】14. 最长公共前缀(详解)

题目

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

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

题目地址:https://leetcode.cn/problems/longest-common-prefix/

示例

【LeetCode-简单】14. 最长公共前缀(详解)_第1张图片

方法1:字符串截取比较-前缀由短边长(自己写的)

思路

前缀 从短变长

先让数组第一个字符串的前一个字母作为head,让其他字符串的第一个字母与head比较
如果大家的第一个字母都相同,那就让head变成第一个字符串的前两个字母
如果有字符串的前面和head不同,那就直接返回上一次的head,说明这次的head不合格

    public String longestCommonPrefix(String[] strs) {
        //先找出最短的字符串,让它的长度成为循环的长度:例如 最短的是“apple”5,那就循环5次比较
        int minLen = strs[0].length();
        for (int i = 0;i

效果

【LeetCode-简单】14. 最长公共前缀(详解)_第2张图片

方法2:前缀由长变短法(力扣官方)

思路

写一个longestCommonPrefix方法,用于返回两个字符串的公共前缀

然后再主方法中,先让第一个字符串定为公共前缀,然后依次和后面的字符串执行longestCommonPrefix方法,更新公共前缀,最后公共前缀越来越短。

【LeetCode-简单】14. 最长公共前缀(详解)_第3张图片

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        //先让公共前缀是第一个字符串
        String prefix = strs[0];
        int count = strs.length;
        //让后面的字符串 与当前公共前缀进行求公共前缀,并更新公共前缀
        for (int i = 1; i < count; i++) {
            prefix = longestCommonPrefix(prefix, strs[i]);
            if (prefix.length() == 0) {
                break;
            }
        }
        return prefix;
    }

    //定义一个 返回两个字符串公共前缀的方法
    public String longestCommonPrefix(String str1, String str2) {
        int length = Math.min(str1.length(), str2.length());
        int index = 0;
        while (index < length && str1.charAt(index) == str2.charAt(index)) {
            index++;
        }
        return str1.substring(0, index);
    }
}

效果

【LeetCode-简单】14. 最长公共前缀(详解)_第4张图片

总结

我怎么没想到 写一个专门比较字符串前缀的方法?

不要狭隘的认为只能写一个方法,多想想方法调用,能让代码更加简洁高效

你可能感兴趣的:(LeetCode刷题,leetcode,算法,java)