function LCS(wordX, wordY) {
var m = wordX.length;
var n = wordY.length;
this.lcs = function(){
var l = [];
var path = [];
var i, j, a, b;
for(i = 0; i <= m; ++i) {
l[i] = [];
path[i] = [];
for(j = 0; j <= n; j++) {
l[i][j] = 0;
path[i][j] = 0;
}
} for(i = 1; i <= m; i++) {
for(j = 1; j <= n; j++) {
if(wordX[i - 1] == wordY[j - 1]) {
l[i][j] = l[i - 1][j - 1] + 1;
path[i][j] = 1; //取左上角
} else {
a = l[i - 1][j]; //取上边
b = l[i][j - 1]; //取左边
if(b >= a){
l[i][j] = b;
path[i][j] = 2;
}else{
l[i][j] = a;
path[i][j] = 3;
}
}
}
}
return {
l:l,
p:path,
len:l[m][n]
};
} this.getPath = function(){
var obj = this.lcs();
var p = obj.p;
var l = obj.l;
var list = [];
print(m,n,list); function print(i,j,list){
var typ = p[i][j]; if(i==0 || j==0){
return ;
} console.log(i,j,typ,wordX[i-1],wordY[j-1])
if(typ == 1){
print(i-1,j-1,list);
list.push(wordX[i-1]); //为1时,表示 wordx[i-1]=wordy[j-1],任意取一个
}
if(typ == 2){
print(i,j-1,list);
} if(typ == 3){
print(i-1,j,list);
}
} return list; } } var lcs = new LCS('ABCADAB', 'BACDBA');
console.log(lcs.lcs());
console.log(lcs.getPath());
//B A D B //l[i][j] 表示 stri , strj 最大公共子序列
//如果 str1[i] == str2[j], 则 l[i][j] = l[i-1][j-1] + 1;
//如果 str1[i] != str2[j],则 l[i][j] = max(l[i-1][j],l[i][j-1]) ;

  

js动态规划---最长子序列(lcs)的更多相关文章

  1. nyoj17-单调递增最长子序列-(dp)

    17-单调递增最长子序列 内存限制:64MB 时间限制:3000ms 特判: No通过数:125 提交数:259 难度:4 题目描述: 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列 ...

  2. 动态规划(1)——最长子序列(LCS)问题

    最长子序列问题:从中找出最长的字符序列,比如: cnblogs和belong.这两个字符串的最长子序列就是blog. 动态规划:通过分解大问题,不断的将大问题变成小问题,最终整合所有解,得出最优解(和 ...

  3. 【LCS,LIS】最长公共子序列、单调递增最长子序列

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4   输入 ...

  4. Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)

    一.Description A palindrome is a symmetrical string, that is, a string read identically from left to ...

  5. 动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)

    To the Max Time Limit:1 Second     Memory Limit:32768 KB Problem Given a two-dimensional array of po ...

  6. nyoj 17-单调递增最长子序列 && poj 2533(动态规划,演算法)

    17-单调递增最长子序列 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:21 submit:49 题目描述: 求一个字符串的最长递增子序列的长度 如 ...

  7. 算法:Common Subsequence(动态规划 Java 最长子序列)

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

  8. 动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )

    1.问题描述 给定一个字符串(序列),求该序列的最长的回文子序列. 2.分析 需要理解的几个概念: ---回文 ---子序列 ---子串 http://www.cnblogs.com/LCCRNblo ...

  9. 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹

    一,    最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...

随机推荐

  1. CentOS7 vsftpd 安装及配置

    0x:卸载vsftpd [root@localhost ~]# yum remove vsftpd [root@localhost ~]# find / -name "vsftpd*&quo ...

  2. 记一次treegrid checkbox 选择问题

    最后选择 select 方法来实现 checkRow checked 属性也不行 getChecked 方法并不能取到这两种方法的行数据

  3. 网站性能优化实战——从12.67s到1.06s的故事

    文章摘自https://juejin.im/post/5b0b7d74518825158e173a0c 作为互联网项目,最重要的便是用户体验.在举国“互联网+”的热潮中,用户至上也已经被大多数企业所接 ...

  4. iOS 精简Controlelr代码的两个方法

    MVC是苹果推荐使用的iOS APP架构.后来又有MVVM,MVP等架构出现.主要目的是让业务逻辑.展示.数据各个层级解耦.实现最大程度上的代码复用. 对MVC这种架构来说,随着APP中模的增多,控制 ...

  5. windows Git Bash 无法运行python解决方法

    以前运行cmd命令都是在cmd里面的,但是那个页面实在是太丑了,后面我就全部用git bash来运行window下的命令了. 但是在git bash 中运行下python – -version 或 p ...

  6. mongodb丢失数据的原因剖析 - 迎风飘来的专栏 - CSDN博客 https://blog.csdn.net/yibing548/article/details/50844310

    mongodb丢失数据的原因剖析 - 迎风飘来的专栏 - CSDN博客 https://blog.csdn.net/yibing548/article/details/50844310

  7. [administrative][CentOS][NetworkManager] 万恶的NetworkManager到底怎么用

    这好像是第三次不得不去学会NetworkManager的用法,可是它真的很难用.社区里无人不吐槽. 然而,还是要用! 这次从redhat的文档入手,也许可以成功 --! https://access. ...

  8. iOS只给矩形两个边加圆角

    - (void)updataTopCornerRadius { CGRect clipRect = CGRectMake(, , self.headPhotoIv.width, self.headPh ...

  9. uarts裸机程序

    硬件平台:JZ2440 实现功能:向串口软件实现输出putchar函数 start.s   --> 设置堆栈,关闭看门狗,初始化时钟,初始化sdram init.c      -->初始化 ...

  10. centos中文语言安装

    1.查看当前使用的系统语言 #echo LANG 2.查看系统是否安装中文 #locale 如有zh_cn,表示已经安装了中文语言 3.安装中文 #yum groupinstall chinese-s ...