Моя цель - перенести несколько строк в одну (кратчайшую) строку, которая будет содержать весь символ каждой строки в прямом направлении. Вопрос не специфичен ни для какого языка, но больше для части algorithm
. (возможно, он будет реализован на сервере node, поэтому пометка nodejs/javascript
).
Итак, чтобы объяснить проблему:
Рассмотрим, что у меня несколько строк
["jack", "apple", "maven", "hold", "solid", "mark", "moon", "poor", "spark", "live"]
Результирующая строка должна выглядеть примерно так:
"sjmachppoalidveonrk"
: s j m ac hppoalidveonr k
apple: sjm a ch pp oa l idv e onrk
solid: s jmachpp o a lid veonrk
============================= > p >
Все это ручная оценка, и выход не может быть на 100% идеальным в этом примере.
Итак, точка - все буквы каждой строки должны существовать на выходе в
ВНЕШНЕЕ НАПРАВЛЕНИЕ (здесь актуальная проблема), и, возможно, сервер отправит окончательные строки, и цифры, такие как 27594
, будут сгенерированы и переданы для извлечения маркера в нужном конце. Если мне нужно пробить его в минимально возможной строке, было бы намного проще (в этом случае достаточно только уникальных символов). Но в этом случае есть несколько точек:
-
Буквы могут присутствовать несколько раз, хотя я должен повторно использовать любые если возможно, например: для
solid
иhold
o > l > d
может быть повторно используется как направление вперед, но дляapple
(a > p
) иspark
(p > a
), мы должны повторитьa
, так как в одном случае он появляется передp
дляapple
, а послеp
дляsparks
, так что либо нам нужно повторитьa
илиp
. мы не можем сделатьp > a > p
, поскольку он будет охватывать оба случая потому что нам нужно дваp
послеa
-
У нас нет возможности разместить один
p
и использовать тот же индекс дважды за время извлечения, нам нужно несколькоp
без опции слева, поскольку входной токен содержит - Я (не) уверен, что существует множество возможностей для набора строки. но проблема заключается в том, что она должна быть минимальной по длине, комбинация не имеет значения, если она охватывает все жетоны в прямом направлении. все (или одно) выходы минимально возможной длины необходимо отслеживать.
- Добавляем этот пункт как EDIT к этому сообщению. Прочитав комментарии и зная, что это уже существующее проблема известна как кратчайшая общая проблема supersequence, мы можем определите, что результирующая строка будет кратчайшей строка, из которой мы можем генерировать любую входную строку просто удаление некоторых (от 0 до N) символов, это то же самое, что и все входы могут быть найдены в прямом направлении в результирующей строке.
Я попытался, начав с произвольной строки, а затем сделал анализ следующей строки и разделил все буквы и разместил их соответственно, но через несколько раз кажется, что текущие строковые буквы могут быть помещены в лучшую way, Если последние строки (или предыдущие строки) были помещены в соответствии с текущей строкой. Но снова эта строка анализировалась и помещалась на основе чего-то (многократного), что было обработано, и помещать что-то в пользу чего-то, что не обрабатывалось, кажется трудным, потому что нам нужно обработать это. Или, может быть, я поддерживаю дерево всего обработанного/необработанного дерева, помогая, строя здание последней строки? Любой лучший способ, чем это, кажется грубой силой!
Примечание. Я знаю, что существует много других преобразований, пожалуйста, постарайтесь не предлагать что-либо еще для использования, мы немного изучаем это, и что-либо в контексте вопроса будет высоко ценится. Если что-то неясно или нужно какое-либо дальнейшее объяснение, не стесняйтесь комментировать. Спасибо тонну за то, что прочитали всю проблему с терпением.