Самая длинная общая подпоследовательность из 3+ строк

Я пытаюсь найти самую длинную общую подпоследовательность из трех или более строк. В статье в Википедии есть отличное описание , как это сделать для двух строк , но я Я немного не уверен, как расширить это число до 3 или более строк.

Существует множество библиотек для поиска LCS из 2 строк, поэтому я хотел бы использовать одну из них, если это возможно. Если у меня есть 3 строки A, B и C, допустимо ли найти LCS A и B как X, а затем найти LCS X и C, или это неправильный способ сделать это?

I ' Мы реализовали это в Python следующим образом:

import difflib

def lcs(str1, str2):
    sm = difflib.SequenceMatcher()
    sm.set_seqs(str1, str2)
    matching_blocks = [str1[m.a:m.a+m.size] for m in sm.get_matching_blocks()]
    return "".join(matching_blocks)

print reduce(lcs, ['abacbdab', 'bdcaba', 'cbacaa'])

Это выводит «ba», но должно быть «baa».

15
задан del 20 February 2011 в 13:16
поделиться