Алгоритм Левенштейна , кажется, работает для вас (по сути, алгоритм LCS, который вы упомянули). Просто запишите действие, которое вы выберете, в другой таблице (сразу после того, как вы выберете минимум, вам нужно записать, какое действие привело к минимальной стоимости, чтобы иметь возможность посмотреть его позже).
if (seq1[i] == seq2[j] && d[i - 1, j - 1] <= d[i - 1, j] + 1
&& d[i - 1, j - 1] <= d[i, j - 1] + 1) {
d[i, j] = d[i - 1, j - 1];
action[i, j] = MATCHED;
} else if (d[i - 1, j] < d[i, j - 1]) // If cost of insertion is less:
{
d[i, j] = d[i - 1, j] + 1;
action[i, j] = INSERTION;
} else {
d[i, j] = d[i, j - 1] + 1;
action[i, j] = DELETION;
}
Затем используйте action[i, j]
, чтобы рекурсивно вернуться к процессу и поместить выбранное действие в стек.