leetcode:14.最长公共前缀

简介: 要注意题目是要找公共前缀,不是子串,前缀的意思就是说前面必须是一样的。首先可以假设下标为0的元素就是目前找到的最长公共前缀,然后从下标1开始遍历,看看当前元素与第0个元素的公共前缀是什么,比较他们的长度,取较短的就是这次循环结束后的公共前缀了。

题目描述:


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


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


示例:


示例1:


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


示例2:


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


说明:


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


题目难度:简单


分析:


要注意题目是要找公共前缀,不是子串,前缀的意思就是说前面必须是一样的。首先可以假设下标为0的元素就是目前找到的最长公共前缀,然后从下标1开始遍历,看看当前元素与第0个元素的公共前缀是什么,比较他们的长度,取较短的就是这次循环结束后的公共前缀了。以此类推,代码如下:


class Solution {
    public String longestCommonPrefix(String[] strs) {
      // 由题意可知,数组为空是返回空字符串,只有一个元素的时候它就是最长的公共前缀
        if (strs.length == 0) {
            return "";
        } else if (strs.length == 1) {
            return strs[0];
        }
        // 首先假设下标为0的元素就是目前最长的公共前缀
        String str0 = strs[0];
        int minCount = str0.length();
        for (int i = 1; i < strs.length; i++) {
            int count = 0;
            String temp = strs[i];
            for (int j = 0; j < temp.length(); j++) {
              /* 这里直接调用了api,从当前元素的第0位开始和数组的第0个元素比较,
              直到找到不包含的元素即可知道公共前缀的长度了。
              */
                if (str0.startsWith(temp.substring(0, j + 1))) {
                    count++;
                } else {
                    break;
                }
            }
            // 当找到公共前缀以后和minCount比较,取较小
            minCount = Math.min(minCount, count);
        }
        // 只需返回截取以后的最长前缀即可
        return str0.substring(0, minCount);
    }
}


总结:


时间复杂度O ( n ) ,n是所有字符加在一起的长度。代码很简单,思路也比较清晰,缺点就是需要比较很多次,效率不高。改进的方法就是采用分治法。

目录
相关文章
|
7月前
|
机器学习/深度学习 Java
LeetCode 14. 最长公共前缀
LeetCode 14. 最长公共前缀
62 1
|
7月前
|
Python
leetcode-14:最长公共前缀
leetcode-14:最长公共前缀
45 0
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
【Leetcode-13.罗马数字转整数 -14.最长公共前缀】
53 0
|
2月前
|
算法
Leetcode第十四题(最长公共前缀)
这篇文章介绍了一种算法,用于在给定的字符串数组中找到最长公共前缀,通过逐字符比较每个字符串的对应位置,一旦发现不匹配立即返回当前已匹配的子串作为公共前缀。
26 0
|
4月前
|
算法
LeetCode第14题最长公共前缀
该文章介绍了 LeetCode 第 14 题最长公共前缀的解法,通过取一个字符串作为基准,一列一列字符比较来找出最长公共前缀,时间复杂度为 O(m * n),同时提到也可使用二分查找法,但代码复杂度会上升。
LeetCode第14题最长公共前缀
|
6月前
|
存储 算法 Java
【经典算法】LeetCode14:最长公共前缀(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode14:最长公共前缀(Java/C/Python3实现含注释说明,Easy)
46 1
|
6月前
|
算法
力扣经典150题第二十题:最长公共前缀
力扣经典150题第二十题:最长公共前缀
31 0
|
7月前
【力扣】14. 最长公共前缀
【力扣】14. 最长公共前缀
|
7月前
|
C++ 索引
【力扣经典面试题】14. 最长公共前缀
【力扣经典面试题】14. 最长公共前缀
|
7月前
|
算法 Java
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
48 0