У меня есть список строк, например
- Foobar
- Foobaron
- Foot
- табурет
- barfoo
- вольная
Я хочу найти набор кратчайших возможных подпоследовательностей, которые уникальны для каждой строки в наборе; символы в каждой подпоследовательности не должны быть смежными, только по порядку, как они появляются в исходной строке. В приведенном выше примере это будет (по другим возможностям)
-
Fb
(как уникальный для Foobar по мере его возникновения, столкновение с Foobaron неизбежным) -
Fn
(уникально для Foobaron, другого...F...n...
) -
Ft
(Нога) -
bs
(barstool) -
bf
(barfoo) -
e
(footloose)
Существует ли эффективный способ разбить такие последовательности и свести к минимуму количество сталкивающихся строк (когда нельзя избежать столкновений, например, когда строки являются подстроками других строк) из заданного массива строк? Точнее, выбирая длину N, каков будет набор подпоследовательностей до N символов, каждый из которых идентифицирует исходные строки с наименьшим числом столкновений.