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