leetcode5 最长公共前缀三种python解法

  1. 最长公共前缀

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

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

示例 1:

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

示例 2:

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

一开始觉得难的地方是在字符串数组里循环字符串,然后再挨个比较字符串里面的字母是否相同,后来find函数------检测字符串中是否包含子字符串 str

复制代码
str1.find(str, beg=0, end=len(string))

返回值,默认是0,如果没找到返回-1;因此只要选择list中任意一个字符串作为子字符串,循环检索list每个字符串(比较要注意,比较如果没有就让子字符串从后面-1,此时不去检索下一个,而是一直循环在这个字符串上,接着find直至找到相同的部分,因为是公共的必须满足每一个都找到相同的)

法一:

python 复制代码
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        res=strs[0]#先res=第一个字符串
        for i in range(1,len(strs)):
            while strs[i].find(res)!=0:
                res=res[0:len(res)-1]#如果没找到就减一个
            i+=1
        return res

法二:字符串sort后 字典中以最小和最大的相同位置字符进行比较,循环终止条件是遇到不想等的字符或者是到达某一个字符串的末尾

python 复制代码
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        strs.sort()
        first=strs[0]
        last=strs[-1]
        res=""
        length=len(first)
        for i in range(length):
            if i<length and first[i]==last[i]:
                res+=first[i]
            else:
                break
            
        return res
  • 字符串相加是字符串
  • else:break必须,因为是从前向后检索,有不相同那么后面所有都不相同就不用for往后循环了

法三:python的zip函数将列表(对象)打包为元组,按列组合+enumerate在回文数中用于遍历列表(或者元组、字符串)的下标和元素

python 复制代码
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        for i, str in enumerate(zip(*strs)):
            if len(set(str))>1:#str为字符串按列组合------下标相同;set是组成集合,过滤重复元素;如果=1是都相同,如果>1则对应相同下表的字符不相同
                return strs[0][0:i]
        return min(strs)

*strs使用解包操作符,把strs元素拆分册灰姑娘多个单独的参数,zip把相同位置的字符打包成元组,for中如果有字符不相同就返回strs中任意一个字符串的前i-1个元素;如果没有就返回长度最小的一定是公共的

相关推荐
AI棒棒牛4 分钟前
SCI核心论文剖析:ICSD-YOLO:面向工业现场安全的实时智能检测算法
算法·yolo·目标检测·计算机视觉·目标跟踪·yolo26
Dream of maid6 分钟前
Python基础 6 (面向对象)
开发语言·python
郝学胜-神的一滴8 分钟前
「栈与缩点的艺术」二叉树前序序列化合法性判定:从脑筋急转弯到工程实现
java·开发语言·数据结构·c++·python·算法
她说..12 分钟前
Java Object类与String相关高频面试题
java·开发语言·jvm·spring boot·java-ee
Mr_Tony16 分钟前
Swift 中的 Combine 框架完整指南(含示例代码 + 实战)
开发语言·swift
无心水19 分钟前
22、Java开发避坑指南:日期时间、Spring核心与接口设计的最佳实践
java·开发语言·后端·python·spring·java.time·java时间处理
Hello.Reader23 分钟前
双卡 A100 + Ollama 最终落地手册一键部署脚本、配置文件、预热脚本与 Python 客户端完整打包
开发语言·网络·python
vx_biyesheji000124 分钟前
计算机毕业设计:Python网约车订单数据可视化系统 Django框架 可视化 数据大屏 数据分析 大数据 机器学习 深度学习(建议收藏)✅
大数据·python·机器学习·信息可视化·django·汽车·课程设计
AC赳赳老秦28 分钟前
OpenClaw实战案例:用1个主控+3个Agent,实现SEO文章日更3篇
服务器·数据库·python·mysql·.net·deepseek·openclaw
汀、人工智能31 分钟前
[特殊字符] 第25课:合并两个有序链表
数据结构·算法·链表·数据库架构··合并两个有序链表