力扣由浅至深 每日一题.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 "";
    }
}
相关推荐
小当家.105几秒前
从零构建项目认知:如何画出一张合格的系统架构图(以供应链系统为例)
java·spring boot·学习·架构·系统架构·供应链·实习
ghie90902 分钟前
GPS抗干扰算法MATLAB实现
开发语言·算法·matlab
悟能不能悟3 分钟前
springboot如何通过url地址获得这个地址的文件
java·spring boot·后端
问今域中4 分钟前
Spring Security + JWT
java·后端·spring
格林威5 分钟前
基于轮廓特征的工件分类识别:实现无模板快速分拣的 8 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·目标跟踪·分类·数据挖掘
Jasmine_llq6 分钟前
《UVA11181 条件概率 Probability|Given》
数据结构·算法·深度优先搜索(dfs)·剪枝(可行性剪枝)·组合枚举(递归暴力枚举)·条件概率统计与归一化
我命由我123457 分钟前
Android 项目路径包含非 ASCII 字符问题:Your project path contains non-ASCII characters
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
沛沛老爹11 分钟前
Web开发者突围AI战场:Agent Skills元工具性能优化实战指南——像优化Spring Boot一样提升AI吞吐量
java·开发语言·人工智能·spring boot·性能优化·架构·企业开发
老鼠只爱大米12 分钟前
LeetCode算法题详解 560:和为K的子数组
算法·leetcode·前缀和·哈希表·子数组求和·subarraysum
MM_MS14 分钟前
Halcon小案例--->路由器散热口个数(两种方法)
人工智能·算法·目标检测·计算机视觉·视觉检测·智能路由器·视觉