Leetcode面试经典150_Q14最长公共前缀

题目:

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""


思路A:横向/纵向扫描

Python:

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:s = ""if len(strs)<2:return strs[0]for i in range(len(strs[0])):c = strs[0][i]for j in range(1,len(strs)):if i>=len(strs[j]) or c!=strs[j][i]:return ss+=creturn s

思路B:分治/二分

对于问题 \textit{LCP}(S_i\cdots S_j),可以分解成两个子问题 \textit{LCP}(S_i \ldots S_{mid})\textit{LCP}(S_{mid+1} \ldots S_j),其中 mid=\frac{i+j}{2}。对两个子问题分别求解,然后对两个子问题的解计算最长公共前缀,即为原问题的解。

最长公共前缀的长度不会超过字符串数组中的最短字符串的长度。可以在 [0,minLength] 的范围内通过二分查找得到最长公共前缀的长度。每次取查找范围的中间值 mid,判断每个字符串的长度为 mid 的前缀是否相同,如果相同则最长公共前缀的长度一定大于或等于 mid,如果不相同则最长公共前缀的长度一定小于 mid,通过上述方式将查找范围缩小一半,直到得到最长公共前缀的长度。

Python:

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:def lcp(start, end):if start == end:return strs[start]mid = (start + end) // 2lcpLeft, lcpRight = lcp(start, mid), lcp(mid + 1, end)minLength = min(len(lcpLeft), len(lcpRight))for i in range(minLength):if lcpLeft[i] != lcpRight[i]:return lcpLeft[:i]return lcpLeft[:minLength]return "" if not strs else lcp(0, len(strs) - 1)class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:def isCommonPrefix(length):str0, count = strs[0][:length], len(strs)return all(strs[i][:length] == str0 for i in range(1, count))if not strs:return ""minLength = min(len(s) for s in strs)low, high = 0, minLengthwhile low < high:mid = (high - low + 1) // 2 + lowif isCommonPrefix(mid):low = midelse:high = mid - 1return strs[0][:low]

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

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

相关文章

微软edge浏览器上网、下载速度慢,如何解决??

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【Spring】一问详解什么是Spring IoC和DI

目录 一、IoC & DI入门1.1、Spring1.1.1、什么是容器1.1.2、什么是IoC 1.2、IoC介绍1.2.1、传统程序开发1.2.2、问题分析1.2.3、问题解决1.2.4、 IoC优势 1.3、Bean的作用域1.4、DI介绍 二、IoC详解2.1、Bean的存储2.1.1、类注解的使用2.1.2、获取bean对象的其他方式2.1.3、…

【Linux 命令】内核、驱动调试手段总结

文章目录 1. printk2. strace3. Itrace4. ptrace5. ftrace6. 动态打印7. perf8. devmem9. demsg参考&#xff1a; 1. printk **printk()**是 Linux 内核中最广为人知的函数之一。它是我们打印消息的标准工具&#xff0c;通常也是追踪和调试的最基本方法。 虽然 printk() 是基…

Integer.parseInt

Integer.parseInt 是 Java 中的一个静态方法&#xff0c;用于将字符串参数解析为有符号的十进制整数。这个方法属于 java.lang.Integer 类。 方法签名 java复制代码 public static int parseInt(String s) throws NumberFormatException public static int parseInt(String …

element问题总结之el-table使用fixed中 header换行后固定行错位问题/固定列下陷问题

固定列下陷问题 效果图问题描述解决方案1、为table添加ref2、调用节点重新自适应方法doLayout3、在操作表头的时候触发的函数header-dragend绑定doLayout方法4、成功解决 效果图 问题描述 在使用el-table的fixed中&#xff0c;发现如果header拖拽文本折行的时候会出现下陷 解…

【大数据】大数据概论与Hadoop

目录 1.大数据概述 1.1.大数据的概念 1.2.大数据的应用场景 1.3.大数据的关键技术 1.4.大数据的计算模式 1.5.大数据和云计算的关系 1.6.物联网 2.Hadoop 2.1.核心架构 2.2.版本演进 2.3.生态圈的全量结构 1.大数据概述 1.1.大数据的概念 大数据即字面意思&#x…

SRIO学习(3)使用SRIO IP核进行设计

文章目录 前言一、设计框图二、模块介绍三、上板验证 前言 本文将通过使用SRIO IP核实现数据通信&#xff0c;重点在于打通数据链路&#xff0c;具体的协议内容设计并非重点&#xff0c;打通了链路大家自己根据设计需求来即可。 一、设计框图 看了前面高速接口的一些设计&am…

nandgame中的asm编程Network(网络)

参考&#xff1a;https://zhuanlan.zhihu.com/p/613188641 题目说明&#xff1a; 网络从网络上的另一台计算机接收数据&#xff0c;并在屏幕上显示它。有效载荷将是宽度为 16 像素的图像。有关所使用的网络协议的详细信息&#xff0c;请参阅关卡帮助。网络线被内存映射到地址…

探索算力(云计算、人工智能、边缘计算等):数字时代的引擎

引言 在数字时代&#xff0c;算力是一种至关重要的资源&#xff0c;它是推动科技创新、驱动经济发展的关键引擎之一。简而言之&#xff0c;算力即计算能力&#xff0c;是计算机系统在单位时间内完成的计算任务数量或计算复杂度的度量。随着科技的不断发展和应用范围的不断扩大…

【Java基础】运行第一个Java程序

开始时间: April 8, 2024 结束时间: April 8, 2024 阶段: Done 需要掌握&#xff1a; 1、了解 JDK 的作用&#xff0c;注意下 JDK 和 JRE 的区别 2、知道 xxx.java 的程序是如何实现跨平台&#xff08;JVM&#xff09; 3、了解命令行中 javac 的作用&#xff0c;忘了具体怎…

流式密集视频字幕

流式密集视频字幕 摘要1 IntroductionRelated Work3 Streaming Dense Video Captioning Streaming Dense Video Captioning 摘要 对于一个密集视频字幕生成模型&#xff0c;预测在视频中时间上定位的字幕&#xff0c;理想情况下应该能够处理长的输入视频&#xff0c;预测丰富、…

C语言 | Leetcoce C语言题解之第18题四数之和

题目&#xff1a; 题解&#xff1a; int comp(const void* a, const void* b) {return *(int*)a - *(int*)b; }int** fourSum(int* nums, int numsSize, int target, int* returnSize, int** returnColumnSizes) {int** quadruplets malloc(sizeof(int*) * 1001);*returnSize…

Wireshark,结合wireshark讲讲,一个请求从发出到收到响应都经过了什么

Wireshark 是一款强大的网络协议分析工具&#xff0c;用于捕获和分析网络数据包。当我们使用 Wireshark 跟踪一个请求从发出到收到响应的过程时&#xff0c;它能够揭示出这个过程中涉及的各个网络层次、协议交互以及数据包的详细内容。以下是一个典型HTTP请求&#xff08;以GET…

企业版ChatGPT用户激增至60万;百度文心一言推出个性化声音定制功能

&#x1f989; AI新闻 &#x1f680; 企业版ChatGPT用户激增至60万 摘要&#xff1a;OpenAI首席运营官Brad Lightcap在接受采访时透露&#xff0c;企业版ChatGPT的注册用户已超60万&#xff0c;相较2024年1月的15万用户&#xff0c;短短三个月内增长了300%。这一版本自2023年…

PHP获取路径或目录或当前文件名

<?php //获取当前文件的绝对路径 echo "__FILE__: > ".__FILE__; echo <br/>; //获取当前文件的名称 echo basename(__FILE__); echo <br/>; //获取当前脚本的目录 echo "__DIR__: > ".__DIR__; echo <br/>…

使用Redisson实现分布式锁解决幂等问题

业务场景 功能&#xff1a;实现创建订单功能&#xff0c;要求是保证接口幂等。 引入pom依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.13.2</version> </…

C++11新特性(2) ——动态内存和智能指针从入门到入坑

动态内存与智能指针 动态内存的使用十分容易出现问题&#xff08;内存泄漏/非法内存&#xff09;&#xff0c;而智能指针能更安全、容易的使用动态内存&#xff0c;因为他负责自动释放所指向的对象&#xff0c;并且在出现异常时&#xff0c;也会自动释放。 两种智能指针&#…

《springcloud alibaba》 四 seata安装以及使用

目录 准备调整db配置准备创建数据库 seata配置nacos配置confi.txt下载向nacos推送配置的脚本 启动seata新建项目order-seata项目 订单项目数据库脚本pom.xmlapplication.yml启动类实体类dao类service类controller类feign类mapper类 stock-seata 库存项目数据库脚本pom.xmlappli…

STM32学习和实践笔记(5):时钟树

STM32一共有4个时钟源。外部时钟高低速各一个&#xff0c;内部时钟高低速各一个。 外部高速时钟是&#xff1a;4-16MHZ的HSE OSC。HS表示高速high speed. E表示外部的external。开发板该处安装的8M晶振。 外部低速时钟是&#xff1a;32.768KHz的LSI OSC。LS表示高速low speed…

【IP层的校验和与UDP的校验和】+【FPGA实现】

IP头校验和 IP头校验和是一种错误检测机制&#xff0c;用于在互联网协议&#xff08;IP&#xff09;中保证IP头的数据完整性。 当一个IP数据包从源主机发送到目的主机时&#xff0c;它经过许多路由器和交换机&#xff0c;校验和可以帮助这些中间设备检查数据包在传输过程中是…