最长公共子序列是很基本的算法,只是最近用到了就又拿来学习一下,网上有很多很多的Java版本的,的确写的也很不错,思想都很好,大致上分为三种:

1.基于递归的思想

2.基于动态规划的思想

3.基于HashMap的动态规划

在这里我使用的是python来实现,方法很简单,先看程序:

#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:计算字符串之间的最长公共子序列
'''def get_lcs(string1, string2):'''输入:待比较的两个字符串输出:降序输出的(子序列长度,子序列)列表'''string1_list=list(string1)string2_list=list(string2)lcs_list=[]for i in range(len(string1_list)):flag=0lcs=''for j in range(i,len(string1_list)):for k in range(flag, len(string2_list)):if string1_list[j]==string2_list[k]:lcs+=string1_list[j]flag=k+1lcs_list.append((len(lcs), lcs))print len(lcs_list)return sorted(lcs_list, reverse=True)if __name__ == '__main__':lcs_list=get_lcs("abcdjio7890bhsdjknyewhbnvd", "djio78347bvfdjbnknyew")print lcs_list

结果如下:

26
[(11, 'io77bbknyew'), (10, 'o77bbknyew'), (9, 'ddjbknyew'), (9, 'ddjbknyew'), (9, '77bbknyew'), (8, 'jjbknyew'), (8, 'ddjknyew'), (8, 'ddjknyew'), (8, 'ddjknyew'), (8, '8bbknyew'), (7, 'jjknyew'), (7, 'bbknyew'), (7, 'bbknyew'), (7, 'bbknyew'), (7, 'bbknyew'), (7, 'bbknyew'), (5, 'nnyew'), (5, 'knyew'), (4, 'bbnn'), (4, 'bbnn'), (3, 'yew'), (2, 'vd'), (2, 'nn'), (2, 'ew'), (2, 'dd'), (1, 'w')]
[Finished in 0.5s]

算法的思想也很简单,这里简单说一下:首先将字符串转换成字符串列表形式,以第一个字符串为基准开始循环遍历比较,设置标志位,目的是为了只比较第二个字符串跟第一个字符串字符相同位置之后的字符串,而不重头开始比较,保证了效率的同时保证了得到的子序列中的元素相对位置与原始字符串中各个元素的相对位置是相同的。

python实现Longest Common Subsequence最长公共子序列算法相关推荐

  1. C++longest common subsequence最长公共子序列的实现(附完整源码)

    C++longest common subsequence最长公共子序列 longest common subsequence最长公共子序列的完整源码(定义,实现,main函数测试) longest ...

  2. JavaScript实现longest Common Substring最长公共子串算法(附完整源码)

    JavaScript实现longest Common Substring最长公共子串算法(附完整源码) longestCommonSubstring.js完整源代码 longestCommonSubs ...

  3. leetcode 1143. Longest Commom Subsequence 最长公共子序列(中等)

    一.题目大意 标签: 动态规划 https://leetcode.cn/problems/longest-common-subsequence 给定两个字符串 text1 和 text2,返回这两个字 ...

  4. LeetCode in Python-14. Longest Common Prefix 最长公共前缀

    Longest Common Prefix 最长公共前缀 题目 解法1.逐位比较 解法2.利用集合性质 解法3.zip+sets 解法4.借助os模块自带函数... 出处 题目 解法1.逐位比较 cl ...

  5. C++longest common string最长公共字符串的实现(附完整源码)

    C++longest common string最长公共字符串的实现 longest common string最长公共字符串实现的完整源码(定义,实现,main函数测试) longest commo ...

  6. C++longest increasing subsequence 最长递增子序列的实现之二(附完整源码)

    C++longest increasing subsequence 最长递增子序列的实现 C++longest increasing subsequence 最长递增子序列的的实现完整源码(定义,实现 ...

  7. C++longest increasing subsequence 最长递增子序列的实现之一(附完整源码)

    C++longest increasing subsequence 最长递增子序列的实现 C++longest increasing subsequence 最长递增子序列的的实现完整源码(定义,实现 ...

  8. JavaScript实现longestCommonSubsequence最长公共子序列算法(附完整源码)

    JavaScript实现longestCommonSubsequence最长公共子序列算法(附完整源码) longestCommonSubsequence.js完整源代码 longestCommonS ...

  9. 两个字符串的最长公共子序列长度_程序员编程算法,解决文本相似度问题的最长公共子序列算法!...

    在前面我讲解了如何通过最长公共子串来求解两个文本的相似度问题,但它有一定缺陷,举个例子,看下面的两个字符串 我爱吃小青菜和各种鲜水果. 我很爱吃青菜与各样水果. 上面两个字符串,如果通过计算子串来求相 ...

  10. 使用最长公共子序列算法进行序列比对

    介绍 在分子生物学中,DNA 和蛋白质可以表示为字母序列. DNA 序列由 A.T.G.C 组成,代表核苷碱基(nucleobases) 腺嘌呤.胸腺嘧啶.鸟嘌呤和胞嘧啶. 蛋白质由 20 个不同的字 ...

最新文章

  1. C#中调用Windows API时的数据类型对应关系
  2. ADO.NET Entity Framework如何:通过每种类型一个表继承以定义模型(实体框架)
  3. php的框架目录,Laravel 框架目录结构
  4. mysql命令行的一些小技巧
  5. javascript --- [FormData的使用] 表单元素转换成表单 对象二进制文件上传
  6. codeforces G - Almost Increasing Array 动态规划、动态开点线段树
  7. 一文教你使用java开发一款推箱子游戏
  8. 新零售基础设施 看阿里巴巴如何打“地基”
  9. 剑指offer(C++)-JZ76:删除链表中重复的结点(数据结构-链表)
  10. halcon例程讲解_halcon例程学习笔记(6)
  11. JS散度(Jensen-Shannon)
  12. 通过注册表文件进行配置WSUS自动更新
  13. (10)python日志收集
  14. 仿迅雷播放器教程 -- 提取exe资源
  15. 百宝云COM组件操作教程
  16. 自定义AXI外设IP核实现流水灯
  17. 计算机为什么获取mac地址,电脑获取mac地址失败怎么办
  18. 如何在微信公众号正文中添加附件?
  19. html5 audio左侧,HTML5之Audio(四)—— 左右声道
  20. 树莓派mjpg-streamer+内网穿透

热门文章

  1. 用Redis实现分布式锁 与 实现任务队列【转载】
  2. 就这么简单!构建强大的WebShell防护体系
  3. 第十次课:Python函数(一)
  4. java LinkedHashMap源码解析
  5. JSdom操作内容,样式,属性
  6. OSPF中 HELL0包解析
  7. 使用derby导入mongodb数据
  8. struct过滤器和拦截器的区别
  9. [Xcode 实际操作]五、使用表格-(8)自定义UITableView单元格Accessory样式(附件图标)
  10. angular.isString()