Я пытаюсь найти самую длинную общую подпоследовательность из 3 или более строк. В статье в Википедии есть отличное описание как это сделать для 2 строк, но я немного не уверен, как расширить это до 3 или больше строк.
Существует множество библиотек для поиска LCS из 2 строк, поэтому я хотел бы использовать один из них, если это возможно. Если у меня есть 3 строки A, B и C, правильно ли найти LCS A и B как X, а затем найти LCS X и C, или это неправильный способ сделать это?
Я реализовал его в 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".