Longest Common Subsequence Between Two Strings In JavaScript

preview_player
Показать описание
Write a solution for LCS in JavaScript (with brief explanation)

Рекомендации по теме
Комментарии
Автор

Hi, Mono Li I saw your video and it is great solution.

vilayhongbounthanh
Автор

Awesome solution. I love this kind of content. My mind was blown how you created the matrix with Array. from, I've never even thought of that. Thanks for sharing

kettenbach
Автор

Thanks for this great vid Mono! Cheers.

inqztiv
Автор

Full Code:
function lcs(str1, str2) {
let larger, smaller, largerLength, smallerLength;
if (str1.length >= str2.length) {
larger = str1;
smaller = str2;
} else {
larger = str2;
smaller = str1;
}
largerLength = larger.length;
smallerLength = smaller.length;
let matrix = Array.from({ length: smallerLength + 1 }, () =>
Array.from({ length: largerLength + 1 }, () => 0)
);
for (let row = 1; row < matrix.length; row++) {
for (let col = 1; col < matrix[row].length; col++) {
if (larger[col - 1] === smaller[row - 1]) {
matrix[row][col] = matrix[row - 1][col - 1] + 1;
} else {
matrix[row][col] = Math.max(matrix[row][col - 1], matrix[row - 1][col]);
}
}
}
let traceResult = [];
(function tracer(row, col) {
if (matrix[row][col] === 0) return;
if (matrix[row][col] === matrix[row][col - 1]) {
tracer(row, col - 1);
} else if (matrix[row][col] === matrix[row - 1][col]) {
tracer(row - 1, col);
} else if (matrix[row][col] === matrix[row - 1][col - 1] + 1) {
traceResult.push(larger[col - 1]);
tracer(row - 1, col - 1);
}
})(smallerLength, largerLength);
return
}


// console.log(lcs("BACBEDZ", "BZZZAC"))
// console.log( lcs("aaaa", "aa") )//=> "ABAD"
// lcs("AGGTAB", "GXTXAYB") => "GTAB"
// lcs("aaaa", "aa") => "aa"

monoli