python寻找最长公共子串算法的方法有哪些
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"python寻找最长公共子串算法的方法有哪些",在日常操作中,相信很多人在python寻找最长公共子串算法的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
花魁咖啡
互联网科技公司
伟宏互联网科技
哈尔滨大商圈互联网科技有限公司
华服互联网科技怎么样
苏州找大状互联网科技有限公司
互联网科技行业发展
涨乐互联网科技
互联网科技会
互联网下的科技发展
互联网最新的科技有限公司
云电互联网科技
百单互联网科技有限公司
广州紫鲸互联网科技
深圳期待互联网科技
蓝色互联网科技
卫星互联网科技股票
成都玖崟互联网科技有限公司乐商圈怎么样
互联网科技有哪些公司
中国科技创新与世界互联网大会
中国互联网科技股
圆梦互联网科技
互联网 科技创业
善班互联网科技
中国互联网有什么科技含量
成都互联网科技公司100强
互联网科技创新服务
用友工业互联网科技发展
科技大学互联网
恒生互联网科技业指数调整周期