leetCode刷题 14. 最长公共前缀

news2024/11/20 13:23:27

目录

1. 思路

2. 解题方法

3. 复杂度

4. Code


题目:

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

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

示例 1:

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

示例 2:

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

提示:

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

1. 思路

要找到字符串数组中的最长公共前缀,可以将第一个字符串作为基准,然后依次比较后续字符串与基准字符串的每个字符,直到遇到不同的字符或者遍历完所有字符串。

2. 解题方法

  1. 如果输入数组为空或长度为 0,直接返回空字符串。
  2. 将第一个字符串设为基准字符串。
  3. 遍历基准字符串的每个字符:
    • 在遍历每个字符之前,检查其他字符串是否已经遍历到末尾或者当前字符不与基准字符串的对应字符相等,如果是,则返回基准字符串的前缀部分。
    • 否则,将基准字符串的当前字符与其他字符串的当前字符进行比较,如果不相等,则返回基准字符串的前缀部分。
  4. 如果遍历完基准字符串的所有字符,返回基准字符串本身作为最长公共前缀。

3. 复杂度

  • 时间复杂度:假设字符串数组中共有 n 个字符串,每个字符串的平均长度为 m,则时间复杂度为 O(n*m)。
  • 空间复杂度:O(1),只需要常数级别的额外空间。

4. Code

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        
        String prefix = strs[0]; // 将第一个字符串设为基准字符串
        
        for (int i = 0; i < prefix.length(); i++) {
            char c = prefix.charAt(i);
            
            // 检查其他字符串是否已经遍历到末尾或者当前字符不与基准字符串的对应字符相等
            for (int j = 1; j < strs.length; j++) {
                if (i == strs[j].length() || strs[j].charAt(i) != c) {
                    return prefix.substring(0, i); // 返回基准字符串的前缀部分
                }
            }
        }
        
        return prefix; // 返回基准字符串本身作为最长公共前缀
    }
}

         这段代码通过遍历基准字符串的每个字符,并逐个与其他字符串的对应字符进行比较,实现了查找字符串数组中的最长公共前缀的功能。

欢迎大家留言讨论。

(一份Java面试宝典,有兴趣的读者姥爷可以私信我领取!!!免费滴)

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1520916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker容器技术基础入门-1

文章目录 容器(Container)传统虚拟化与容器的区别Linux容器技术Linux NamespacesCGroupsLXCdocker基本概念docker工作方式docker容器编排 容器(Container) 容器是一种基础工具&#xff1b;泛指任何可以用于容纳其他物品的工具&#xff0c;可以部分或完全封闭&#xff0c;被用于…

利用express从0到1搭建后端服务

目录 步骤一&#xff1a;安装开发工具步骤二&#xff1a;安装插件步骤三&#xff1a;安装nodejs步骤四&#xff1a;搭建启动入口文件步骤五&#xff1a;启动服务器总结 在日常工作中&#xff0c;有很多重复和繁琐的事务是可以利用软件进行提效的。但每个行业又有自己的特点&…

springboot“鼻护灵”微信小程序的设计与开发

摘 要 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对各种需求进行规范而严格是十分有必要的&#xff0c;所以许许多多的微信小程序应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套“鼻护灵”微信小程序&#xff0c;帮助医生进…

thinkphp 3.x反序列化分析

反序列化&#xff1a; 这里主要是挖掘的一些思路与方法 常用的魔法方法&#xff1a; 1.__construct&#xff0c;__destruct __constuct构建对象的时被调用&#xff1b; __destruct明确销毁对象或脚本结束时被调用&#xff1b; 2.__get&#xff0c;__set __set当给不可访问或不…

基于GT911触控IC的电容屏在MSP430上的驱动

背景 最近参加公司一个电池测试仪的项目&#xff0c;负责电容屏驱动开发&#xff0c;电容屏的触控IC是汇顶科技的GT911&#xff0c;电容屏的总线接口是I2C。 因为项目沟通方面的失误&#xff0c;本应接到主控芯片的电容屏&#xff0c;被连到了MSP430这款负责供电管理的MCU&…

day05-SpringBootWeb请求响应

请求响应&#xff1a; 请求&#xff08;HttpServletRequest&#xff09;&#xff1a;获取请求数据响应&#xff08;HttpServletResponse&#xff09;&#xff1a;设置响应数据 BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xf…

Linux使用Docker部署Registry结合内网穿透实现公网远程拉取推送镜像

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

科普文之五分钟轻松入门Generative AI

1. 引言 最近&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;在行业内带来了巨大的变动。还记得 2022 年 11 月推出的 ChatGPT 吗&#xff1f;在短时间内&#xff0c;它就成为了有史以来用户数量最快突破 1 亿的产品。 人工智能已经存在了很长一段时间&…

MySQL锁整理

MySQL锁信息来源 MySQL锁太多&#xff0c;内容太杂。写篇文章记录一下

3D地图在BI大屏中的应用实践

前言 随着商业智能的不断发展&#xff0c;数据可视化已成为一项重要工具&#xff0c;有助于用户更好地理解数据和分析结果。其中&#xff0c;3D地图作为一种可视化工具&#xff0c;已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合&#xff0c;以更加直观…

python--函数的基本用法

python--函数的基本用法 定义函数无参无返回值有参无返回值无参有返回值有参有返回值 空函数多个返回值函数的参数必传参数&#xff08;不传会报错&#xff09;关键字参数不定长参数*args**kwargs区别 拆包(了解)*用法**用法 定义函数 无参无返回值 def foo():语句有参无返回…

网络安全框架和云安全参考架构介绍

目录 一、网络安全框架 1.1 概述 1.2 IATF框架 1.2.1 框架来源 1.2.2 框架结构图 1.2.3 框架内容 1.2.3.1 人&#xff08;People&#xff09; 1.2.3.2 技术&#xff08;Technology&#xff09; 1.2.3.3 操作&#xff08;Operation&#xff09; 1.3 NIST网络安全框架 …

任何图≌自己这一几何最最起码常识推翻直线公理和平面公理

黄小宁 与x∈R相异&#xff08;等&#xff09;的实数均可表为yxδ&#xff08;增量δ可0也可≠0&#xff09;。因各实数的绝对值都可是表示长度的数故各实数都可是一维空间“管道”g内点的坐标。于是x∈R变换为实数yxδ的几何意义可是&#xff1a;“管道”g内R轴上的质点x∈R(x…

由浅到深认识C语言(9):动态内存分配

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

前端基础——HTML傻瓜式入门(2)

该文章Github地址&#xff1a;https://github.com/AntonyCheng/html-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

夏天快到了,车辆改色膜备案流程是什么?

夏天快到了 越来越多的车主想给自己的爱车贴上变色膜。 但也有不少车主对车辆贴膜登记流程并不清楚。 本期电影一号小编就给大家科普一下。 一起来看看吧~ 您可以先更改车身颜色&#xff0c;然后再进行&#xff1a; 现在相关政策发生了变化&#xff0c;允许车主先改变车辆颜…

复杂微纳结构制造需求旺盛 微纳3D打印市场发展前景广阔

复杂微纳结构制造需求旺盛 微纳3D打印市场发展前景广阔 微纳3D打印是一种基于增材原理制造微纳结构的新型微纳加工技术。   3D打印又称为增材制造&#xff0c;是以数字模型为基础&#xff0c;将材料逐层堆积制造出实体物品的制造技术。我国3D打印市场发展动力强劲&#xff0c…

加速渲染:Blender与在线渲染农场的结合

​在数字艺术和三维设计的世界里&#xff0c;Blender软件因其强大的功能和灵活性而广受欢迎。然而&#xff0c;随着项目复杂性的增加&#xff0c;渲染时间也随之增长&#xff0c;成为艺术家和设计师面临的一大挑战。在线渲染农场的出现&#xff0c;为这一问题提供了革命性的解决…

Python Learn day05

Python Learn day05 本文主要讲解 继承、多态、定制类 继承和多态 什么是继承 当新类想要拥有现有类的功能结构&#xff0c;可以使用继承。继承的前提是新类 is a 现有类&#xff0c;即&#xff1a; 子类 is 父类 总是从某个类继承&#xff1a; class Myclass(object):pass…

从单一收入到自由职业:宝哥多元化收入探索之旅

你好&#xff0c;我是宝哥&#xff0c;一个热爱前端开发的自媒体人。 目前是&#xff1a; 前端社群达人 (管理10个前端交流群&#xff0c;连接数千开发者)微博前端大V (拥有20万粉丝&#xff0c;分享最新前端技术和资讯)前端公众号主编 (运营头部前端公众号&#xff0c;影响着数…