14. 最长公共前缀

news2024/9/24 5:33:12

14. 最长公共前缀

一、题目描述:

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

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

示例 1:

输入:strs = [“flower”,“flow”,“flight”]

输出:“fl”

示例 2:

输入:strs = [“dog”,“racecar”,“car”]

输出:“”

解释:输入不存在公共前缀。

提示:

1 <= strs.length <= 200

0 <= strs[i].length <= 200

strs[i] 仅由小写英文字母组成

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/longest-common-prefix

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    这道题目我的思路很简单,就是求字符串切片中最短的那个字符串的长度n,然后从1开始一直到n,截取前面几个字符判断是否一致,如若一致,即继续截取下一个,直到求出最长的公共前缀。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    不是,我的第一思路执行起来有点问题,需要多次遍历切片,时间复杂度太高了!

    我们可以先求字符串切片中最前面两个字符串的最长公共前缀prefix, 之后遍历字符串数组strs时,迭代这个prefix就好了,即求prefix和下一个字符串strs[i]的最长公共前缀。特别的,如果循环中,prefix长度为0,说明strs[0:i]范围内的所有字符串最长公共前缀为空串,后续的遍历也就没有意义了,直接break退出循环。当然,还需要考虑特殊情况,如果字符串数组的长度为0,直接返回空串。

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    image-20221206220616584

    func longestCommonPrefix(strs []string) string {
        if len(strs) == 0 {
            return ""
        }
        for i := 0; i < len(strs[0]); i++ {
            for j := 1; j < len(strs); j++ {
                if i == len(strs[j]) || strs[j][i] != strs[0][i] {
                    return strs[0][:i]
                }
            }
        }
        return strs[0]
    }
    
    作者:LeetCode-Solution
    链接:https://leetcode.cn/problems/longest-common-prefix/solution/zui-chang-gong-gong-qian-zhui-by-leetcode-solution/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

三、AC 代码:

func LongestCommonPrefix(strs []string) string {
	count := len(strs)
	if count == 0 {
		return ""
	}
	prefix := strs[0]
	for i := 1; i < count; i++ {
		prefix = lcp(prefix, strs[i])
		if len(prefix) == 0 {
			break
		}
	}
	return prefix
}

func lcp(str1, str2 string) string {
	length := Min(len(str1), len(str2))
	index := 0
	for index < length && str1[index] == str2[index] {
		index++
	}
	return str1[:index]
}

func Min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

四、总结:

这道题目如果要求时间复杂度不高的话,实现起来还是需要一点技巧的,我的第一思路太暴力了,时间复杂度太高,测试点复杂一点的话,肯定是过不去的!

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

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

相关文章

在线支付系列【23】支付宝支付接入指南

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言接入指南1. 创建应用2. 绑定应用3. 配置密钥4. 上线应用5. 开通产品沙箱环境开发前准备&#xff08;沙箱环境&#xff09;1. 获取参数、秘钥、证书2. 下载支付宝客户端3. 案例演示前言 在之…

一个自动配置 opengrok 多项目的脚本

前段时间在服务器上配置 opengrok 阅读代码&#xff0c;项目有很多个&#xff0c;一个一个手动配置比较繁琐。 我从搭建 tomcat 和 opengrok&#xff0c;到配置和索引完 5 个 Android 项目&#xff0c;用了差不多一整天。 要是再让我手动配置几个项目&#xff0c;估计真要崩溃…

学习Request和Response这一篇就够啦~

Request(请求) &#xff1a; Request&#xff1a;获取请求数据 Response:设置响应数据 Request继承体系&#xff1a; 使用request对象&#xff0c;查阅JavaEE API文档的HttpServeltRequest接口 Tomcat需要解析请求数据&#xff0c;封装为request对象&#xff0c;并且创建requ…

知识图谱嵌入技术研究综述

作者 张天成 1 , * 田 雪 1 , * 孙相会 1 , * 于明鹤 2 , * 孙艳红 1 , * 于 戈 摘要 知识图谱 是一种用图模型来描述知识和建模事物之间的关联关系的技术。 知识图谱嵌入 作为一种被广泛采用的知识表示方法。 主要思想是将知识图谱中的实体和关系嵌入到连续的向量空间中…

Ansible---playbook剧本

目录 引言&#xff1a;什么是playbook&#xff1f; 一、Playbook 1.1、playbook中的核心元素 1.2、playbook中的基础组件 1.3、playbook格式说明 1.4、实例&#xff1a;httpd服务剧本 二、playbook中的模块 2.1、Templates 模块 2.2、tags 模块 2.3、Roles 模块 引言&…

关于链表中插入结点的操作……

服了&#xff0c;好久没敲链表了&#xff0c;这都忘了 newnode->next cur->next; cur->next newnode; newnode->next cur->next; cur->next newnode; newnode->next cur->next; cur->next newnode; newnode->next cur->next; cur-…

科技常识就像雨衣,要常备哦

科技常识就像雨衣&#xff0c;平常不准备&#xff0c;遇雨成落汤鸡 昨日晨跑遇雨&#xff0c;随身带轻便雨塑料雨衣 趣讲大白话&#xff1a;晴天挖水渠 *********** 信息科技是现代科技的【火车头】 往前看&#xff1a;要关注趋势 往后看&#xff1a;要了解行业历史 在当下&…

数据结构 | 栈与队列

&#x1f525;Go for it!&#x1f525; &#x1f4dd;个人主页&#xff1a;按键难防 &#x1f4eb; 如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f4d6;系列专栏&#xff1a;数据结构与算法 &#x1f52…

使用C#编写k8s CRD Controller

本文项目地址&#xff1a;k8s-crd - Repos (azure.com)CRDCRD指的是Custom Resource Definition。开发者更多的关注k8s对于容器的编排与调度&#xff0c;这也是k8s最初惊艳开发者的地方。而k8s最具价值的地方是它提供了一套标准化、跨厂商的 API、结构和语义。k8s将它拥有的一切…

【测试开发】web 自动化测试实战 --- MuiscServerTest

目录界面测试功能测试1. 登录注册模块功能测试2. 音乐列表页自动化测试3. 喜欢音乐列表页自动化测试4. 上传音乐模块自动化测试5. 以上所有测试用例集成测试套件项目测试亮点web 自动化测试实战就通过测试自己的 onlinemusicserver 音乐服务器项目进行测试&#xff0c;通过 sel…

冰冰学习笔记:多线程

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

基于TimeQuest时序优化原理和方法

&#x1f4a1; 回顾基于RTL逻辑时序优化的基本思路&#xff0c;在关键路径中插入寄存器来优化时序 分析最坏路径 通过前面对TimeQuest软件的理解&#xff0c;基本上可以找到关键路径&#xff0c;此文章主要对关键路径时序进行优化&#xff0c;使设计达到时序要求&#xff0c;以…

RibbitMQ 入门到应用 ( 一 ) 基本概念

1.什么是RabbitMQ 1.0.什么是MQ 1.1.RabbitMQ简介 消息队列提供一个异步通信机制&#xff0c;消息的发送者不必一直等待到消息被成功处理才返回&#xff0c;而是立即返回。消息中间件负责处理网络通信&#xff0c;如果网络连接不可用&#xff0c;消息被暂存于队列当中&#…

基于YOLOV5的钢材缺陷检测

数据和源码见文末 1.任务概述 数据集使用的是东北大学收集的一个钢材缺陷检测数据集,需要检测出钢材表面的6种划痕。同时,数据集格式是VOC格式,需要进行转化,上传的源码中的数据集是经过转换格式的版本。 2.数据与标签配置方法 在数据集目录下,train文件夹下有训练集数据…

机器学习基本概念总结

深度学习是机器学习的一个特定分支&#xff0c;要想充分理解深度学习&#xff0c;就必须对机器学习的基本原理有深刻的理解。机器学习的本质属于应用统计学&#xff0c;其更多地关注如何用计算机统计地估计复杂函数&#xff0c;而不太关注为这些函数提供置信区间&#xff0c;大…

HTTP、HTTPS

目录 1.HTTP 1.1.概述 1.2.报文结构 1.2.1.请求报文 1.2.2.响应报文 1.3.方法 2.HTTPS 1.HTTP 1.1.概述 HTTP&#xff0c;超文本传输协议&#xff0c;WEB体系选用了该协议作为应用层协议。 1.2.报文结构 1.2.1.请求报文 HTTP的请求报文&#xff08;request&#xff0…

idea集成chatGPT

idea集成chatGPT 一、idea安装chat GPT插件 1.在Plugins中搜索chatGPT&#xff0c;找到如图所示的这个并点击安装&#xff0c;安装完成后点击apply 插件安装成后会出现chatGPT的图标 2.点击点击工具窗口的扳手按钮&#xff0c;将进行插件的初始设置&#xff0c;这里选择官方…

Linux GPIO模块-RK3588 GPIO驱动分析

1.简介 GPIO是可编程的通用I/O外设。如下图所示&#xff0c;RK3588 GPIO控制器包含3个部分&#xff1b;APB接口模块和SoC内部的APB总线连接&#xff0c;负责与SoC交换数据&#xff0c;位宽为32位&#xff1b;I/O port接口模块管理外部的引脚&#xff0c;引脚的输入和输出都要经…

C++复习笔记7

1.C内存分区 C内存分区&#xff1a;代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统管理 全局区&#xff1a;存放全局变量静态变量和常量。 栈区&#xff1a;编译器分配&#xff0c;存放函数的参数值和局部变量等。 堆区&#xff1a;由程序员分配和释放&a…

IntelliJ IDEA 创建JavaFX项目运行

IntelliJ IDEA 创建JavaFX项目运行JavaFX官网文档&#xff1a;https://openjfx.io/openjfx-docs/ JavaFX 2008年12月05日诞生&#xff0c;是一个开源的下一代客户端应用程序平台&#xff0c;适用于基于 Java 构建的桌面、移动和嵌入式系统。这是许多个人和公司的协作努力&#…