最长公共前缀

作者: Ziv_紫藤花开 | 来源:发表于2021-04-04 23:13 被阅读0次

    题目信息

    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

    示例 1:

    输入:strs = ["flower","flow","flight"]
    输出:"fl"

    示例 2:

    输入:strs = ["dog","racecar","car"]
    输出:""
    解释:输入不存在公共前缀。

    解题思路

    1. 暴力破解:依次比较所有元素得出公共前缀
    2. 无效操作分析:当数组较前元素没有公共前缀后,后面的元素就没有继续比较的意义了。
    3. 优化方法:
    4. 考虑边界:
      1. 数组为空,公共前缀为“”
      2. 数组有且只有一个元素,公共前缀为该元素本身。
    5. 编码实现

    代码

    解法一:横向比较

    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;
        }
    
        /**
         * 返回当前字符与前缀的共同部分
         */
        private 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);
        }
    }
    

    解法二:纵向比较

    class Solution {
        public String longestCommonPrefix(String[] strs) {
            if (strs == null || strs.length == 0) {
                return "";
            }
            int length = strs[0].length();
            int count = strs.length;
            for (int i = 0; i < length; i++) {
                char c = strs[0].charAt(i);
                for (int j = 1; j < count; j++) {
                    if (i == strs[j].length() || strs[j].charAt(i) != c) {
                        return strs[0].substring(0, i);
                    }
                }
            }
            return strs[0];
        }
    }
    

    题目来源:力扣(LeetCode)
    题目链接:https://leetcode-cn.com/problems/longest-common-prefix

    商业转载请联系官方授权,非商业转载请注明出处。

    相关文章

      网友评论

        本文标题:最长公共前缀

        本文链接:https://www.haomeiwen.com/subject/rbughltx.html