美文网首页
LeetCode每日一题,最长公共前缀

LeetCode每日一题,最长公共前缀

作者: JAVA编程手记 | 来源:发表于2021-04-22 22:37 被阅读0次

    题目

    最长公共前缀

    https://leetcode-cn.com/problems/longest-common-prefix/

    公众号 《java编程手记》记录JAVA学习日常,分享学习路上点点滴滴,从入门到放弃,欢迎关注

    描述

    难度:简单

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

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

    示例 1:

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

    示例 2:

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

    提示:

    0 <= strs.length <= 200
    0 <= strs[i].length <= 200
    strs[i] 仅由小写英文字母组成
    

    Solution

    正常解法

    解题思路

    如何求最长公共前缀

    • 字符串数组中求出最长公共前缀,这句话就意味着每个字符串都必须包含这个公共前缀字符串
    • 我们可以任意指定一个字符串数组中的一个字符串PRE
    • PRE为例子,循环遍历每个字符串STR
      • 如果STR中不包含PRE,则PRE字符串整体长度切割减一,直到当前STR字符串中包含PRE字符串
      • 然后进行下一个字符串的匹配,在下一个字符串中同理,判断是否包含PRE字符串,不包含则PRE字符串整体长度切割减一
      • 依次循环,最后返回PRE的值,也就是公共长度的值

    CODE

    class Solution {
        public String longestCommonPrefix(String[] strs) {
            //边界条件判断
            if (strs == null || strs.length == 0){
                return "";
            }
            //默认第一个字符串是他们的公共前缀
            String pre = strs[0];
            //遍历每个字符串
            for(String str : strs){
                //死循环判断当前STR是否包含PRE,直到包含则跳出while循环
                while(str.indexOf(pre)!=0){
                    //不包含则切割最后一位
                    pre = pre.substring(0, pre.length() - 1);
                }
            }
            return pre;
        }
    }
    

    复杂度

    • 时间复杂度:O(mn),其中 m 是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。

    • 空间复杂度:O(1),使用的额外空间复杂度为常数。

    结果

    • 执行用时:4 ms, 在所有 Java 提交中击败了100.00%的用户
    • 内存消耗:38.5 MB, 在所有 Java 提交中击败了72.23%的用户

    LeetCode名句

    这题属于简单吗???

    相关文章

      网友评论

          本文标题:LeetCode每日一题,最长公共前缀

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