LCS的python实现:

 #!/usr/bin/env python
#-*- coding: utf-8 -*-
import sys reload(sys)
sys.setdefaultencoding('utf-8') class LCS(object):
"""Long Common Subsequence算法
"""
def __init__(self, str1, str2):
self.s1 = str1
self.s2 = str2
self.lcs = [['' for i in range(len(self.s2) + 1)] for j in range(len(self.s1) + 1)] # 另一种写法 def get_lcs_len(self):
"""递归计算lcs的长度
"""
for i in xrange(len(self.s1) + 1):
for j in xrange(len(self.s2) + 1):
if i == 0 or j == 0:
self.lcs[i, j] = 0
elif self.s1[i - 1] == self.s2[j - 1]:
self.lcs[i, j] = self.lcs[i - 1][j - 1] + 1
else:
self.lcs[i, j] = max(self.lcs[i - 1][j], self.lcs[i][j - 1])
return self.lcs[len(self.s1), len(self.s2)] def get_lcs(self):
"""递归计算lcs(直接获取lCS)
"""
for i in xrange(len(self.s1) + 1):
for j in xrange(len(self.s2) + 1):
if i == 0 or j == 0:
self.lcs[i][j] = ''
elif self.s1[i - 1] == self.s2[j - 1]:
self.lcs[i][j] = self.lcs[i - 1][j - 1] + self.s1[i - 1]
else:
self.lcs[i][j] = self.lcs[i - 1][j] if len(self.lcs[i - 1][j]) > \
len(self.lcs[i][j - 1]) else self.lcs[i][j - 1]
return self.lcs[len(self.s1)][len(self.s2)] if __name__ == '__main__':
s1 = 'abcdefgw'
s2 = 'bdfgegwe'
model = LCS(s1, s2)
print model.get_lcs()

动态规划及LCS的更多相关文章

  1. 动态规划之LCS(最大公共子序列)

    #include <stdio.h> #include <string.h> int b[50][50]; int c[50][50]; int length = 0; voi ...

  2. nyoj 37-回文字符串(reverse, 动态规划, lcs)

    37-回文字符串 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:17 题目描述: 所谓回文字符串,就是一个字符串,从左到右读和从 ...

  3. 动态规划:LCS

    先上状态转移方程,还是很容易看明白的 例题是Codevs的1862,这个题不是实现了方程就可以了的,还要完成一个事情那就是计数,数一数到底有多少个最长公共子序列 #include<cstdio& ...

  4. 51nod 最长公共子序列问题(动态规划)(LCS)(递归)

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

  5. 奇妙的算法之LCS妙解

    LCS算法妙解 LCS问题简述:最长公共子序列 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列. LCS问题的分支:最长公共子串 ...

  6. Poj 1458 Common Subsequence(LCS)

    一.Description A subsequence of a given sequence is the given sequence with some elements (possible n ...

  7. 【动态规划】Dynamic Programming

    动态规划 一.动态规划 动态规划(Dynamic Programming)是一种设计的技巧,是解决多阶段决策过程最优化问题的通用方法. 基本思想:将待求解问题分解成若干个子问题,先求解子问题,然后从这 ...

  8. Java数据结构和算法总结-字符串及高频面试题算法

    前言:周末闲来无事,在七月在线上看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说 ...

  9. VS2017gets的使用

    由于动态规划的LCS问题,需要从第一个字符开始读取比较方便.所以用gets_s();第一个参数是起始位置,第二个参数是字读取字符的长度. #include<bits/stdc++.h> # ...

随机推荐

  1. mongodb写入策略(WriteConcern)

    写入策略(WriteConcern) mongodb的写入策略有多种方式,写入策略是指当客户端发起写入请求后,数据库什么时候给应答,mongodb有三种处理策略:客户端发出去的时候,服务器收到请求的时 ...

  2. Java并发AtomicLongArray类

    java.util.concurrent.atomic.AtomicLongArray类提供了可以原子读取和写入的底层long类型数组的操作,并且还包含高级原子操作. AtomicLongArray支 ...

  3. MSF——基本使用和Exploit模块(一)

    MSF系列: MSF——基本使用和Exploit模块(一) MSF——Payload模块(二) MSF——Meterpreter(三) MSF——信息收集(四) MSF——Metasploit Fra ...

  4. 零基础如何快速学习好Python网络爬虫?

    Python网络爬虫上手很快,能够尽早入门,可是想精通确实是需求些时间,需求达到爬虫工程师的级别更是需求煞费苦心了,接下来共享的学习道路是针对小白或许学习Python网络爬虫不久的同伴们. 学习网络爬 ...

  5. 这是什么b

    用table表格标签渲染总排名和总分数据 <!DOCTYPE html> <html lang="zh"> <head> <meta ch ...

  6. 【知识强化】第四章 网络层 4.8 移动IP

    这节课我们来学习一下移动IP. 那移动IP呢要跟动态IP区分开.动态IP是指,通过使用DHCP协议,在一个局域网内部的一台主机,就可以动态地获得一个IP地址.那这里面的移动IP是什么意思呢? 我们来举 ...

  7. 记录Angular2.0学习遇到的问题

    最近开始学习Angular2.0,准备持续记录下踩过得坑 1如何读取本地json文件: 需要通过http请求读取本地json文件,数据文件要放在assets文件夹下面 Service中的代码如下:   ...

  8. oracle 数据库 锁

    首先你要知道表锁住了是不是正常锁?因为任何DML语句都会对表加锁. 你要先查一下是那个会话那个sql锁住了表,有可能这是正常业务需求,不建议随便KILL session,如果这个锁表是正常业务你把se ...

  9. 用idea将本地项目提交到gitlab上

    提交的前提是你必须有gitlab的地址 以下是将本地代码提交到gitlab上 在idea的菜单项选择 VCS>Import into Version Control>Create Git ...

  10. css雪碧图实现数字切换

    vue中 css 雪碧图应用及数字切换demo 1. CSS Sprites一般只能使用到固定大小的盒子(box)里,这样才能够遮挡住不应该看到的部分. 2.使用css雪碧图的优点: 利用CSS Sp ...