python寻找最长公共子串算法的方法有哪些
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍"python寻找最长公共子串算法的方法有哪些",在日常操作中,相信很多人在python寻找最长公共子串算法的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
千家信息网最后更新 2025年12月03日python寻找最长公共子串算法的方法有哪些
这篇文章主要介绍"python寻找最长公共子串算法的方法有哪些",在日常操作中,相信很多人在python寻找最长公共子串算法的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"python寻找最长公共子串算法的方法有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
算法题:
找出两个字符串的最长公共子串!
分析题目:
2个字符串中可能存在多个相同长度的最长公共子串,所以返回的应该是列表。
双循环遍历二个子串,找到重复的子串将其添加入最长子串列表,同时记录最长子串长度。循环中遇到更长的子串时将其添加入最长子串列表,同时修正最长子串长度。
简洁代码:
def find_repeat1(a, b):longest = [] # 最长子串仓库max = 0 # 最长子串长度for x in range(len(b)): # x是字符串b的指针y = 0 # y是字符串a的指针while y < len(a):long = '' # 子串申明z = 0 # 子串长度# 判断若a子串指针和b子串指针都不越界且它们指向的字符相同则进入循环while y+z < len(a) and x+z < len(b) and a[y+z] == b[x+z]: long += a[y + z] # 子串累加z += 1 # 子串长度累加if z >= max: # 子串长度超过最长子串长度longest.append(long) # 将该子串加入仓库max = z # 最长子串长度修正y = y + z if z > 0 else y + 1 # 修正字符串b的指针longest = set(longest) # 去重return [i for i in longest if len(i) == max] # 返回所有符合最长长度的子串
简洁风代码有17行。
实用代码:
def find_repeat2(a, b):longest = [] # 保存有重复的子串lena = len(a)lenb = len(b)max = 0 # 最长长度for x in range(lenb): # x是字符串b的指针y = 0 # y是字符串a的指针for y in range(lena):if a[y] == b[x]: # 判断字符是否相同long = '' # 临时子串z = 0 # 统计子串长度keya = y # 记录a开始重复的位置keyb = x # 记录b开始重复的位置while a[keya] == b[keyb]:long += a[keya] # 有重复的那么子串累加z += 1 # 子串长度累加keya += 1 # a开始重复的位置指针+1keyb += 1 # b开始重复的位置指针+1if keya >= lena or keyb >= lenb: #如果a或b指针越界break # 退出循环if z >= max: # 临时子串长度大于最大长度max = z # 最大长度修正longest.append(long) # 将临时子串添加入库longest = set(longest) # 去重return [i for i in longest if len(i) == max] # 返回所有符合最长长度的子串
实用风代码有25行。
代码比较:
简洁风代码比实用风代码少了三分之一,很大的差距了。现在我们来比较一下它们的性能。为了测试性能,我传入2个超长的字符串来作比较:
a = 'abdomen' * 300b = 'dfomenshfabdomh' * 300t1 = time.time()print(find_repeat1(a, b))t2 = time.time()print(t2 - t1)print('=' * 20)t1 = time.time()print(find_repeat2(a, b))t2 = time.time()print(t2 - t1)print(17 / 25)print(t3 / t4)print('=' * 20)out:['abdom']5.348941802978516====================['abdom']1.5207555294036865====================0.683.4231525397933256简洁代码长度只有实用代码长度的68%,简洁代码耗时是实用代码的3.4倍!!!
2种代码核心算法完全一致,性能却差了这么多!!!
到此,关于"python寻找最长公共子串算法的方法有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
长度
最长
代码
字符
指针
字符串
算法
实用
方法
简洁
位置
学习
相同
性能
时子
循环
最大
仓库
同时
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器的防火墙作用
真正的互联网科技公司
pythonweb服务器安全
网络安全教程百度云
较新的网络安全问题
网络技术加密_解密技术
造成网络安全素养缺乏的原因
数据库最大值怎么设置
数据库工程师挂靠
前端 后端和数据库端的区别
携程 云南 数据库
数据库 如何修改数据
思科网络技术学院教程复习
最新三级网络技术视频
数据库sales模式
售票系统数据库需求分析简介
软件开发前方案
传奇爆率数据库
dns服务器分析出错
网络安全是发展新基建
网络安全内容 怎么写
网络货运平台软件开发公司
网络安全五点主张秉持
服务器下电
五个数据库应用系统
江阴品质软件开发价格咨询
tfip服务器怎么开启
idl和数据库的连接
软件开发cpu需要多大
浙江调度服务器挂式