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 相关文章推荐
在Docker上开始部署Python应用的教程
Apr 17 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
python迭代器与生成器详解
Mar 10 Python
Python 递归函数详解及实例
Dec 27 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python和php哪个更适合写爬虫
Jun 22 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
js 函数的副作用分析
2011/08/23 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
python的类变量和成员变量用法实例教程
2014/08/25 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
利用python代码写的12306订票代码
2015/12/20 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
技术负责人岗位职责
2015/02/10 职场文书
个人年终总结范文
2015/03/09 职场文书
中学社团活动总结
2015/05/07 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
创业计划书之酒吧
2019/12/02 职场文书
python基础之爬虫入门
2021/05/10 Python
Go gorilla/sessions库安装使用
2022/08/14 Golang