说明
找出两个字符串序列的最长子序列(在两个字符串序列中以相同的顺序出现,但不要求联系的字符串序列)的长度
例子
找出w1='acbaed',w2='abcadf'的最长公共子序列
思路
用w1,w2构建矩阵,,项相同则加1,如下
代码
function lcs(w1, w2) {
// 初始化矩阵
let matrix = [];
for (i = 0; i <= w1.length; i++){
matrix[i] = []
for (let j = 0; j <= w2.length; j++) {
matrix[i][j] =0
}
}
// 矩阵重0开始算,是因为(w1[i-1]===w2[j-1])需要取上一轮的值
for (i = 1; i <= w1.length; i++){
for (j = 1; j <= w2.length; j++) {
if(w1[i-1]===w2[j-1]){
// 应为w1[i-1]或者w2[j-1]的项只能对应一个值,所以即使w1[i-1]===w2[j-1]也只能取上一轮的前一个值+1
matrix[i][j] =matrix[i-1][j-1]+1
}else{
// 前一个值
let a = matrix[i][j-1]
// 上一轮的值
let b = matrix[i-1][j]
matrix[i][j] =Math.max(a,b)
}
}
}
return matrix
}
console.log(lcs("abcadf", "acbaed"));