Учитывая 2 строки, мы должны найти строку, наименьшую по длине такую, что данные строки являются подпоследовательностями строки. Другими словами, нам нужно найти строку, такую, что удаление некоторых символов приводит к заданным строкам. думал о грубой силе и LCS, но напрасно.
12345 и 11234 должны привести к 112345 WWA, а WWS - ответ WWAS
LCS довольно неэффективен в памяти (DP-один), а грубая сила просто ребяческая. Что мне делать?
Возможно, вы могли бы сделать глобальное выравнивание с Needleman-Wunsch и высоким штрафом за несоответствие, чтобы предпочесть indels. В конце объедините выравнивание в "родительскую строку", взяв буквы из совпадающих позиций, а затем букву с любой из вставленных букв, например:
WW-A
||
WWS-
WWSA
Или:
-12345
||||
11234-
112345
Память O (нм), но модификация сужает ее до O (min (n, m)).
В стандартной библиотеке есть хорошо определенный алгоритм, который будет служить вашей цели.
set_union ();
Условие - ваши диапазоны ввода должны быть отсортированы.