Longest Common Subsequence,中文可以稱做最長子序列,這個問題的定義如下:
給定兩個序列,求其最長相同的子序列。此問題和Longest Common Substring不同,Substring中間不可以有斷點,但是subsequence可以。
問題分析:
- 令序列1為S1,序列2為S2
- 令S1 = Sub1 + elm1, S2 = Sub2 + elm2
- 其中elmi就是我們要求的LCS,因此有四個可能
- elm1是LCS的一部分而elm2不是
- elm2是LCS的一部分而elm1不是
- elm1, elm2都是LCS
- elm1, elm2都不是LCS
寫程式的話,就依照Dynamic programming的方式,依次的填入表格就可以,但是如何找出我們要的LCS呢?這須要back tracing才有辦法。留著下回分解吧(如果我有空的話..>"<)。
程式碼如下:
#include <iostream>#include <iostream> #include <iostream> #include <iostream>