Решение проблемы LCS в JavaScript

Задачи JavaScript: от новичка до мастера — Задание №52

Создайте функцию, которая находит самую длинную общую подпоследовательность (LCS) двух строк. Функция должна принимать на вход две строки и возвращать LCS. LCS — это самая длинная последовательность символов, которые появляются в обеих строках в одном и том же порядке.

LCS — самая длинная общая подпоследовательность

Это классическая задача в информатике и динамическом программировании.
Учитывая две последовательности (или строки), цель состоит в том, чтобы найти длину самой длинной подпоследовательности, присутствующей в обеих из них.
Подпоследовательность — это последовательность, которая появляется в одном и том же относительном порядке, но не обязательно последовательно.

Пошаговое решение задачи №52

Шаг 1. Определите функцию LCS

Начнем с определения нашей последней функции под названием longestCommonSubsequence, которая принимает два строковых аргумента: s1 и s2. По завершении он вернет LCS входных строк.

function longestCommonSubsequence(s1, s2) { ... }

Шаг 2. Инициализация переменных длины строки

Добавьте две строки кода, чтобы получить длину строк s1 и s2 и сохранить их в переменных m и n соответственно.

const m = s1.length;
const n = s2.length;

Это поможет вам пройтись по каждой строке и настроить таблицу динамического программирования.

Шаг 3. Настройте таблицу динамического программирования

Поскольку вам нужен двумерный массив, инициализируемый переменной dp, где dp[i][j] представляет длину LCS между первыми i символами s1 и первыми j символами s2.

const dp = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));

Размер +1 гарантирует, что вы также сможете обрабатывать пустые подстроки.
Каждая ячейка инициализируется нулем в качестве отправной точки.

Шаг 4. Заполните DP…