求最长相同子序列
Posted caoke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求最长相同子序列相关的知识,希望对你有一定的参考价值。
//求最长相同子序列 function dp(s1,s2) { var n=s1.length,m=s2.length;//长度 var cs=‘‘; var n1=0,n2=0;//扫描点 var chunkArr=[] //开始扫描 while (n1<n&&n2<m){ //相等 if(s1[n1]===s2[n2]){ let nn1=n1+1; let nn2=n2+1; while (nn1<n&&nn2<m&&s1[nn1]===s2[nn2]){ nn1++; nn2++; } cs=cs+s1.substr(n1,nn1-n1) chunkArr.push([‘e‘,n1,nn1-n1]) n1=nn1; n2=nn2; }else{ let d1=0; let d2=0; if(n1+1<n){ d2=1; } if(n2+1<m){ d1=1; } if(d1===1&&d2===1){ if(s1[n1+1]!==s2[n2+1]){ while (n2+d1<m&&s1[n1]!==s2[n2+d1]){ d1++; } while (n1+d2<n&&s1[n1+d2]!==s2[n2]){ d2++; } } } if(d1===d2&&n-n1===m-n2){ //替换 n1=n1+1; n2=n2+1; }else if(d1<d2||n-n1<m-n2){ //增加 n2=n2+1; }else{ //删除 n1=n1+1; } } } return cs; } console.log(dp(‘252434343232‘,‘2234343‘))
输出:2234343
以上是关于求最长相同子序列的主要内容,如果未能解决你的问题,请参考以下文章
JAVA动态规划,最长递增子序列的代码太难理解,求大神帮我讲解一下!
如何求两个字符串的最长公共子序列: 如:求串<1,0,0,1,0,1,0,1>和<0,1,0,1,1,0,1,1>的最长公共子序列