Python最长公共子串算法实例


Posted in Python onMarch 07, 2015

本文实例讲述了Python最长公共子串算法。分享给大家供大家参考。具体如下:

#!/usr/bin/env python 
# find an LCS (Longest Common Subsequence). 
# *public domain* 
 
def find_lcs_len(s1, s2): 
 m = [ [ 0 for x in s2 ] for y in s1 ] 
 for p1 in range(len(s1)): 
  for p2 in range(len(s2)): 
   if s1[p1] == s2[p2]: 
    if p1 == 0 or p2 == 0: 
     m[p1][p2] = 1
    else: 
     m[p1][p2] = m[p1-1][p2-1]+1
   elif m[p1-1][p2] < m[p1][p2-1]: 
    m[p1][p2] = m[p1][p2-1] 
   else:               # m[p1][p2-1] < m[p1-1][p2] 
    m[p1][p2] = m[p1-1][p2] 
 return m[-1][-1] 
 
def find_lcs(s1, s2): 
 # length table: every element is set to zero. 
 m = [ [ 0 for x in s2 ] for y in s1 ] 
 # direction table: 1st bit for p1, 2nd bit for p2. 
 d = [ [ None for x in s2 ] for y in s1 ] 
 # we don't have to care about the boundery check. 
 # a negative index always gives an intact zero. 
 for p1 in range(len(s1)): 
  for p2 in range(len(s2)): 
   if s1[p1] == s2[p2]: 
    if p1 == 0 or p2 == 0: 
     m[p1][p2] = 1
    else: 
     m[p1][p2] = m[p1-1][p2-1]+1
    d[p1][p2] = 3          # 11: decr. p1 and p2 
   elif m[p1-1][p2] < m[p1][p2-1]: 
    m[p1][p2] = m[p1][p2-1] 
    d[p1][p2] = 2          # 10: decr. p2 only 
   else:               # m[p1][p2-1] < m[p1-1][p2] 
    m[p1][p2] = m[p1-1][p2] 
    d[p1][p2] = 1          # 01: decr. p1 only 
 (p1, p2) = (len(s1)-1, len(s2)-1) 
 # now we traverse the table in reverse order. 
 s = [] 
 while 1: 
  print p1,p2 
  c = d[p1][p2] 
  if c == 3: s.append(s1[p1]) 
  if not ((p1 or p2) and m[p1][p2]): break
  if c & 2: p2 -= 1
  if c & 1: p1 -= 1
 s.reverse() 
 return ''.join(s) 
 
if __name__ == '__main__': 
 print find_lcs('abcoisjf','axbaoeijf') 
 print find_lcs_len('abcoisjf','axbaoeijf')

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python应用程序在windows下不出现cmd窗口的办法
May 29 Python
Python实现的数据结构与算法之快速排序详解
Apr 22 Python
Python中的lstrip()方法使用简介
May 19 Python
Matplotlib中文乱码的3种解决方案
Nov 15 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
Jun 18 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 Python
Python复制目录结构脚本代码分享
Mar 06 #Python
python获取android设备的GPS信息脚本分享
Mar 06 #Python
Python写的英文字符大小写转换代码示例
Mar 06 #Python
Python脚本实现集群检测和管理功能
Mar 06 #Python
Python守护进程(daemon)代码实例
Mar 06 #Python
Python类方法__init__和__del__构造、析构过程分析
Mar 06 #Python
Python列表生成器的循环技巧分享
Mar 06 #Python
You might like
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
Python批量转换文件编码格式
2015/05/17 Python
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
python使用Matplotlib画条形图
2020/03/25 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
基于Django实现日志记录报错信息
2019/12/17 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
Python 串口通信的实现
2020/09/29 Python
python pip如何手动安装二进制包
2020/09/30 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
css3隔行变换色实现示例
2014/02/19 HTML / CSS
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
毕业生的自我鉴定
2013/10/29 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
好人好事演讲稿
2014/09/01 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript