最長公共子序列

最長公共子序列(Longest Common Subsequence, LCS)是一個在電腦科學中廣泛使用的概念,尤其是在字元串處理、序列比對和數據庫搜尋等方面。它指的是兩個或更多序列中共同出現的最長序列,且這些序列的元素保持相對位置不變。

例如,給定兩個字元串 "ABCDGH" 和 "AEDFHR",它們的最長公共子序列是 "ADH"。

最長公共子序列問題是一個NP-完全問題,意味著沒有已知的可以在所有情況下都高效解決這個問題的算法。然而,有一些近似算法和Dynamic Programming算法可以有效地在許多情況下找到最長公共子序列。

Dynamic Programming算法,如Lisowski-Myers算法,可以用於解決這個問題。這個算法的基本思想是使用一個二維數組(通常稱為DP數組)來記錄已經解決的子問題的答案,以便重用這些答案來解決更大的問題。

在實際應用中,最長公共子序列的概念也被用於生物信息學中的序列比對,以及數據庫搜尋中的字元串匹配等。