当前位置: 首页 > news >正文

python:编写一个函数查找字符串中的最长公共前缀

最近在csdn网站上刷到一个题目,题目要求编写一个函数查找字符串中的最长公共前缀,题目如下:

给出的答案如下:

from typing import List
def longestCommonPrefix(strs:List[str]) -> str:if len(strs) == 0:return ''i = 0     #代表公共前缀的位数lcp = []  #存放公共前缀while True:done = Falseif  i >= len(strs[0]):breakj = 0   #代表strs列表中的元素个数,依次对元素做比较while j < len(strs):if i < len(strs[j]):if strs[j][i] != strs[0][i]:done  = Truebreakelse:done = Truebreakj+=1if not done:lcp.append(strs[0][i])i+=1else:breakreturn ''.join(lcp)

乍一看确实有些复杂了,但是思路也还比较清晰:

使用列表中的第1个元素作为比较对象,依次对比第1个元素中的每1位字符是否与其他元素的该位置的字符一致,如果一致就加入到新的列表,遇到不一致的就break退出,最后通过字符串的join方法返回公共前缀。

strs = ['flower','flow','flight','flue']
print(f'公共前缀:{longestCommonPrefix1(strs)}')
#结果
fl

我们可以改良下代码,看上去更好理解,处理思路如下:

先获取给定列表中的最短的元素,在该元素的基础上循环检查其他元素的每一个位是否相同,相同就加入新的列表,遇到不一致的就break退出,最后通过字符串的join方法返回公共前缀。

主要改造说明:

1)使用sorted函数将列表按照元素length从小到达排列,获取到最短的元素

2)使用列表推导式挨个获取相同位置的元素,如果是一样的,经过集合转换后,只会保留1个元素(集合是不重复的元素,可以达到去重功能)

改良的函数如下:

def longestCommonPrefix1(strs:List[str]) -> str:if len(strs) == 0:return ''#使用sorted函数将列表按照元素length从小到达排列,获取到最短的元素new_strs[0]new_strs = sorted(strs,key=lambda x:len(x),reverse=False)print(new_strs)lcp = []  #存放公共前缀#使用range函数循环处理最短元素lengthfor i  in range(len(new_strs[0])):#使用列表推导式挨个获取相同位置的元素,如果是一样的,#经过集合转换后,只会保留1个元素(集合是不重复的元素,可以达到去重功能)if len(set([j[i] for j in new_strs ])) == 1:lcp.append(new_strs[0][i])else:breakreturn ''.join(lcp)
strs = ['flower','flow','flight','flue']
print(f'公共前缀:{longestCommonPrefix1(strs)}')
strs = ['flower','flow','flight','dlue']
print(f'公共前缀:{longestCommonPrefix1(strs)}')
#结果:
['flow', 'flue', 'flower', 'flight']
公共前缀:fl
['flow', 'dlue', 'flower', 'flight']
公共前缀:

不知道大家还有什么方法,请评论区指教。

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Python: networkx绘图
  • python基础题练习
  • 【Java 问题】基础——Java 概述
  • 如何删除EXCELL文件中的空行?
  • leaflet加载GeoServer的WMS地图服务.md
  • C++学习笔记(34)
  • [Excel VBA]如何使用VBA按行拆分Excel工作表
  • Qwen 2.5:阿里巴巴集团的新一代大型语言模型
  • 【FFmpeg应用场景概述】
  • ZLMediaKit Windows编译以及使用
  • Java设计模式——工厂模式扩展
  • python CRC16校验
  • DSP学习00-F28379D学习准备(了解一个工程的构成)
  • Linux容器化管理——Docker常见命令总结
  • C语言编译四大阶段
  • ES6指北【2】—— 箭头函数
  • android图片蒙层
  • Effective Java 笔记(一)
  • ES6核心特性
  • export和import的用法总结
  • express + mock 让前后台并行开发
  • Github访问慢解决办法
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Laravel5.4 Queues队列学习
  • Linux各目录及每个目录的详细介绍
  • MobX
  • mysql常用命令汇总
  • PAT A1092
  • PHP的类修饰符与访问修饰符
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 包装类对象
  • 闭包--闭包之tab栏切换(四)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 第2章 网络文档
  • 京东美团研发面经
  • 排序算法学习笔记
  • 什么软件可以剪辑音乐?
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 阿里云ACE认证之理解CDN技术
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​渐进式Web应用PWA的未来
  • "无招胜有招"nbsp;史上最全的互…
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #Lua:Lua调用C++生成的DLL库
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Java)【深基9.例1】选举学生会
  • (二)PySpark3:SparkSQL编程
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)