网上有很多,但有bug,特别是这个:http://www.oschina.net/code/snippet_16840_2015 好大的坑...

get length

  1. def lcs_len(a,b):
  2. c = [[0 for j in b] for i in a]
  3. for i in range(len(a)):
  4. for j in range(len(b)):
  5. if i==0 or j==0:
  6. continue
  7. if a[i]==b[j]:
  8. c[i][j] = c[i-1][j-1]+1
  9. else:
  10. c[i][j] = max(c[i-1][j],c[i][j-1])
  11. return c[i][j]

get string

  1. def lcs_string(a,b):
  2. lena,lenb = len(a),len(b)
  3.  
  4. # length table
  5. c = [[0 for i in b] for j in a]
  6.  
  7. # direction table
  8. flag = [[0 for i in b] for j in a]
  9.  
  10. for i in range(lena):
  11. for j in range(lenb):
  12. if i==0 or j==0: continue
  13.  
  14. if a[i]==b[j]:
  15. c[i][j] = c[i-1][j-1]+1
  16. flag[i][j] = 3
  17.  
  18. elif c[i-1][j]<c[i][j-1]:
  19. c[i][j] = c[i][j-1]
  20. flag[i][j] = 2
  21. else:
  22. c[i][j] = c[i-1][j]
  23. flag[i][j] = 1
  24.  
  25. (p1,p2) = (lena-1,lenb-1)
  26. s = []
  27. while 1:
  28. d = flag[p1][p2]
  29. if d == 3:
  30. s.append(a[p1])
  31. p1 -= 1
  32. p2 -= 1
  33. elif d == 2:
  34. p2 -= 1
  35. elif d == 1:
  36. p1 -= 1
  37. if p1==0 or p2==0:
  38. # solve the first element without print problem
  39. if a[p1]==b[p2]:
  40. s.append(a[p1])
  41. break
  42. s.reverse()
  43. return ''.join(s)

use into app

  1. def lcs_from_list(input,jobnames):
  2. if input in jobnames:
  3. return input
  4. res = [(lcs_len(input,jobname),jobname) for jobname in jobnames]
  5. res.sort()
  6. return res[-1][1]

python 最长公共子序列的更多相关文章

  1. [Python]最长公共子序列 VS 最长公共子串[动态规划]

    前言 由于原微软开源的基于古老的perl语言的Rouge依赖环境实在难以搭建,遂跟着Rouge论文的描述自行实现. Rouge存在N.L.S.W.SU等几大子评估指标.在复现Rouge-L的函数时,便 ...

  2. 最长公共子序列python实现

    最长公共子序列是动态规划基本题目,以下依照动态规划基本步骤解出来. 1.找出最优解的性质,并刻划其结构特征 序列a共同拥有m个元素,序列b共同拥有n个元素,假设a[m-1]==b[n-1],那么a[: ...

  3. [python] 获得所有的最长公共子序列

    两句闲话 得到两个序列的最长公共子序列(LCS)是个经典问题,使用动态规划,实现起来并不难. 一般来说,我们只是输出一个LCS.但是,老师布置的作业是输出所有的LCS. 解法 按照一般的方法,我们首先 ...

  4. 用Python计算最长公共子序列和最长公共子串

    如何用Python计算最长公共子序列和最长公共子串 1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公 ...

  5. python实现查找最长公共子序列

    #!/usr/bin/python # -*- coding: UTF-8 -*- worlds = ['fosh','fort','vista','fish','hish','hello','ohd ...

  6. 【python】Leetcode每日一题-最长公共子序列

    [python]Leetcode每日一题-最长公共子序列 [题目描述] 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . ...

  7. 用python实现最长公共子序列算法(找到所有最长公共子串)

    软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...

  8. 【ZH奶酪】如何用Python计算最长公共子序列和最长公共子串

    1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公共子序列(Longest-Common-Subseq ...

  9. python 回溯法 子集树模板 系列 —— 14、最长公共子序列(LCS)

    问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 belong cnblogs 输出示例 blog ...

随机推荐

  1. oracle更新统计信息以及解锁统计信息

    begin dbms_stats.unlock_table_stats(ownname => 'DM_MPAY', tabname => 'PLAT_INFO');end; begin d ...

  2. Collection+JSON 文档

    Collection+JSON 文档 对于这个设计,我们不再以可能的状态和转移为起点,相反,我们将从一个集合状态响应中可能元素的顶层布局开始.从这一点入手,其他细节可以随着设计向超媒体类型最底层属性的 ...

  3. 一、PHP MongoDB Windows7_64位安装与配置

    NoSQL现在非常的流行了,由于我所在的公司环境问题,目前还用不到这种数据库,出于好奇,翻了翻资料,也算自学了一下.在此做下记录. 我的本机环境:APMServ5.2.6,PHP肯定就是5.2了. 1 ...

  4. JavaScript:改变li前缀图片和样式

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. LeetCode "Count of Smaller Number After Self"

    Almost identical to LintCode "Count of Smaller Number before Self". Corner case needs to b ...

  6. 【KVM安装】在Centos6.8中安装KVM

    阅读目录 前题条件 章节1:安装Centos6.8-进行硬件检测 章节2:配置网络-设置桥接方式 章节3:安装KVM 章节4:OVA转qcow2 章节5:使用KVM创建虚拟机 章节6:参考链接 前题条 ...

  7. 在Visual Studio里配置及查看IL(转载)

    原文地址:http://www.myext.cn/other/a_25162.html 在之前的版本VS2010中,在Tools下有IL Disassembler(IL中间语言查看器),但是我想直接集 ...

  8. android学习笔记32——资源

    Android应用资源 资源分类: 1.无法直接访问的原生资源,保存于asset目录下 2.可通过R资源清单类访问的资源,保存于res目录下 资源的类型以及存储方式 android要求在res目录下用 ...

  9. 把docker当做绿色打包工具

    如题,我只是把docker当成绿色版的各种环境的集成打包工具了 用到了docker的--net=host模式,这个暂时在mac下是有问题的,linux下正常使用,具体docker的网络模式参考这里,此 ...

  10. apidoc,一个相当不错的文档生成器

    http://apidocjs.com/ 例子:myapp目录下的MyCode.java /** * * @api {get} /company/list 获取公司信息 * @apiName 获取公司 ...