#!一个序列S任意删除若干个字符得到的新序列T,则T叫做S的子序列

注意,这个和最长公共字串不一样,最长公共子串要求连续。

1.算法公式:

def lcs(a,b):
lena = len(a)
lenb = len(b)
c=[[0]*(lenb+1) for j in range(lena+1) ]
flag = [[0]*(lenb+1) for j in range(lena+1) ]
for i in range(lena+1)[1:]:
for j in range (lenb+1)[1:]:
if a[i-1]==b[j-1]:
c[i][j]=c[i-1][j-1]+1
flag[i][j]='ok'
elif c[i-1][j]>c[i][j-1]:
c[i][j]=c[i-1][j]
flag[i][j]='left'
else:
c[i][j]=c[i][j-1] return c a=lcs("ABCDEF","DBAFCDF")
print(a[-1][-1])

这里只是返回最大长度,如果求最大子序列,还需要进行回溯。

自然语言处理之LCS最长公共子子序列的更多相关文章

  1. LIS(最长的序列)和LCS(最长公共子)总结

    LIS(最长递增子序列)和LCS(最长公共子序列)的总结 最长公共子序列(LCS):O(n^2) 两个for循环让两个字符串按位的匹配:i in range(1, len1) j in range(1 ...

  2. LCS 最长公共子子串

    与 最长公共子序列类似 只是最长公共子串必须连续 所以只能走斜线!!!! ''' LCS 最长公共子序列 ''' def LCS_len(x, y): m = len(x) n = len(y) dp ...

  3. 算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列

    出处 http://segmentfault.com/blog/exploring/ 本章讲解:1. LCS(最长公共子序列)O(n^2)的时间复杂度,O(n^2)的空间复杂度:2. 与之类似但不同的 ...

  4. LCS最长公共子序列

    问题:最长公共子序列不要求所求得的字符串在所给字符串中是连续的,如输入两个字符串ABCBDAB和BDCABA,字符串BCBA和BDAB都是他们的公共最长子序列 该问题属于动态规划问题 解答:设序列X= ...

  5. 使用后缀数组寻找最长公共子字符串JavaScript版

    后缀数组很久很久以前就出现了,具体的概念读者自行搜索,小菜仅略知一二,不便讨论. 本文通过寻找两个字符串的最长公共子字符串,演示了后缀数组的经典应用. 首先需要说明,小菜实现的这个后缀数组算法,并非标 ...

  6. POJ 1458 Common Subsequence(LCS最长公共子序列)

    POJ 1458 Common Subsequence(LCS最长公共子序列)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?c ...

  7. uva 10066 The Twin Towers (最长公共子)

    uva 10066 The Twin Towers 标题效果:最长公共子. 解题思路:最长公共子. #include<stdio.h> #include<string.h> # ...

  8. 最长递增子序列(lis)最长公共子序列(lcs) 最长公共上升子序列(lics)

    lis: 复杂度nlgn #include<iostream> #include<cstdio> using namespace std; ],lis[],res=; int ...

  9. 动态规划模板2|LCS最长公共子序列

    LCS最长公共子序列 模板代码: #include <iostream> #include <string.h> #include <string> using n ...

随机推荐

  1. 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)

    Ø  前言 本文主要记录子线程导致 Topshelf 和 Quartz.NET 的 Windows 服务停止的现象,以及使用几种常用子线程的注意事项.因为我们有时可能需要开启多个线程执行复杂的逻辑,如 ...

  2. 第26月第2天 vim javacomplete

    1. 将解压出来的autoload 和 doc的内容添加到~/.vim/下的相应目录下,如果~/.vim下没有这两个文件夹就手动创建其中autoload里的有javacomplete.vim java ...

  3. 4-23 模块 hashlib ,configparser,loging,collections

    1,hashlib模块的补充(摘要算法) 1,Sha1的用法和md5的类似,通常用一个40位的16进制字符串表示.比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度 ...

  4. RSA加解密-2

    Java使用RSA加密解密签名及校验   package com.ihep; import java.io.BufferedReader; import java.io.BufferedWriter; ...

  5. (4)java数据结构--集合类及其数据结构归纳-有大图

    Java集合类及其数据结构归纳 - s小小的我 - 博客园http://www.cnblogs.com/shidejia/p/6433788.html ---------大图可以 在新标签中打开图片 ...

  6. [TensorFlow笔记乱锅炖] tf.multinomial(logits, num_samples)使用方法

    tf.multinomial(logits, num_samples) 第一个参数logits可以是一个数组,每个元素的值可以简单地理解为对应index的选择概率,注意这里的概率没有规定加起来的和为1 ...

  7. python第四天,list补充

    当我们创建的列表中,元素的排列顺序常常是无法预测的,因为我们并非总能控制用户提供数据的顺序.这虽然在大多数情况下都是不可避免的,但我们经常需要以特定的顺序从呈现信息.有时候,我们希望保留列表元素最初的 ...

  8. ROS 可视化(一): 发布PointCloud2点云数据到Rviz

    1. 相关依赖package.xml 需要添加对 pcl_ros 包的依赖 2. CMakeLists.txt find_package(PCL REQUIRED) include_directori ...

  9. Android 6.0系统动态请求系统相机权限

    private static final int TAKE_PHOTO_REQUEST_CODE = 1; public static String takePhoto(Context context ...

  10. JavaWeb - Servlet教程

    http://www.runoob.com/servlet/servlet-tutorial.html