Пусть X будет минимальной суперпоследовательностью A и B , если каждая буква X может быть соответствует букве A и / или B по порядку.
Каждая суперпоследовательность A и B является суперпоследовательностью F тогда и только тогда, когда каждая минимальная суперпоследовательность A и B является суперпоследовательностью F .
DFA, который принимает минимальные суперпоследовательности A и B , может быть легко создан с максимум | A | * | B | состояниями с каждым состоянием соответствует паре совместимых позиций в обеих строках. См https://en.wikipedia.org/wiki/Deterministic_finite_automaton и https://en.wikipedia.org/wiki/Powerset_construction
Если есть суперпоследовательность A и B , которая не является суперпоследовательностью F , то через этот DFA есть путь, который не является суперпоследовательность F .
Определите стоимость пути через DFA как длину самого длинного префикса F , который является подпоследовательностью пути, т. Е. Количеством символов, которое вы бы сопоставили с F по дорожке.
Тогда, поскольку DFA является ациклическим, вы можете использовать алгоритм Дейкстры или поиск по принципу «лучший сначала», чтобы найти наименьшую стоимость для достижения каждого состояния. См https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
Если любое принимающее государство имеет наименьшую стоимость, которая меньше | F | , то существует суперпоследовательность A и B , которая также не является суперпоследовательность F .
Сложность всей операции O (| A | * | B |)
Самый простой способ реализовать это - использовать матрицу | A | + 1 x | B | + 1 в качестве DFA - точно так же, как та, которую вы используете для Расчет LCS. Каждая ячейка в матрице является состоянием. Заполните ячейки их наименьшей стоимостью, когда они будут обнаружены.