Если я не понял это неправильно, эта проблема, скорее всего, связана с P.
Наивный подход будет следующим:
- Взять все строки в B, заканчивающиеся тем же символом, что и s.Назовите эту новую сумку B '.Может быть сделано в O (| B |)
- Выберите все строки, которые являются суперпоследовательностями s в сумке B '.Это можно сделать в O (| B '| * max (| z |)) для z в B. Проверка, является ли данная строка s подпоследовательностью другой строки z, может быть выполнена в O (| z |)
- Выберите самую короткую из ранее найденных строк (в O (| B '|))
Где | x |означает размер x.
Вы можете объединить эти шаги, но в любом случае это O (| B | * max (| z |)).