力扣由浅至深 每日一题.04 最长公共前缀

希望我们都能对抗生活的苦难,在乌云周围突破阴霾积极的生活

------ 24.3.12

14. 最长公共前缀

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

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

示例 1:

复制代码
输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

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

提示:

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

解法一

将字符串数组传入,先进行一个判空操作,将字符串数组的长度传为len,根据长度len进行for循环,递归

Math.min(str1,str2),两字符串较短字符串的长度

subString 常用方法一:

String a ="123456anbdc"; String b = a.subString(1);

此时得到的为字符串a从下标为1的位置开始截取到最后的值,也就是23456anbdc;

subString常用方法二:

String a ="123456anbdc"; String b = a.subString(1,5);

此时得到的为字符串a从下标为1的位置开始截取到下标为5的位置的值(不包括下标为5的值),也就是2345;

subString常用方法三:

String a ="123456anbdc";

String b = a.subString(1,a.index0f("b"));

此时得到的为字符串a从下标为1的位置开始截取到指定字符串"b"的值,也就是23456an;(注:如指定字符串有多个,以第一个为(说明:a.index0f("b")就是取字符串"b"的下标,和上面的用法本质是一样的)

java 复制代码
class Solution {
    public String longestCommonPrefix(String[] strs) {
        String strss = strs[0];
        int len = strs.length;
        if(strs == null || strs.length == 0){
            return "";
        }
        for(int i = 0;i < len;i++){
                //方法的重载,传入参数个数不同
            strss = longestCommonPrefix(strss,strs[i]);
            if(strss.length() == 0){
                break;
            }
        }
        return strss;
    }

    public String longestCommonPrefix(String str1,String str2){
        int len = Math.min(str1.length(),str2.length());//两字符串较短字符串的长度
        int index = 0;
        while(index < len && str1.charAt(index) == str2.charAt(index)){
            index++;
        }
        return str1.substring(0,index);
    }
}

解法二

两层for循环进行遍历

纵向扫描

时间复杂度:O(mn) m 表示字符串数组中所有字符串的平均长度,n 表示字符串数组的大小

空间复杂度:O(1)

charAt函数:用于返回指定索引处的字符,索引范围为从0到lenth()-1

用法:字符串.charAt()

java 复制代码
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];
    }
}
java 复制代码
class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs==null) return "";
        int prefixIndex=strs[0].length();
        String prefix=strs[0];
        int i=0;
        while(prefixIndex>0){
            if(strs[i].startsWith(prefix.substring(0,prefixIndex))) i++;
            else prefixIndex--;
            if(i>=strs.length) return prefix.substring(0,prefixIndex);
        }
        return "";
    }
}
相关推荐
feng_blog668810 分钟前
【docker-1】快速入门docker
java·docker·eureka
枫叶落雨2222 小时前
04JavaWeb——Maven-SpringBootWeb入门
java·maven
m0_748232392 小时前
SpringMVC新版本踩坑[已解决]
java
XianxinMao2 小时前
RLHF技术应用探析:从安全任务到高阶能力提升
人工智能·python·算法
码农小灰2 小时前
Spring MVC中HandlerInterceptor和Filter的区别
java·spring·mvc
hefaxiang2 小时前
【C++】函数重载
开发语言·c++·算法
乔木剑衣3 小时前
Java集合学习:HashMap的原理
java·学习·哈希算法·集合
exp_add33 小时前
Codeforces Round 1000 (Div. 2) A-C
c++·算法
专职3 小时前
spring boot中实现手动分页
java·spring boot·后端
查理零世3 小时前
【算法】经典博弈论问题——巴什博弈 python
开发语言·python·算法