Published at February 25, 2020 · 2 min read
Longest Common Sequence 用动态规划的思想,解决最长公共子序列问题。 先解释概念,什么是公共子序列? 最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的問題。这与查找最長公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置。可能比较难懂,贴上一个维基百科的定义链接 举例如下,假设有两个字符串 A=“acda” B=“adac” 那么 A 和 B 的公共子串有 ac ad ada,其中最长的公共子序列就是 ada 动态规划是什么,简单来说就是把事情按照阶段来进行处理,每个阶段的运算依赖上个阶段的结果。 LCS("abc", "dab") | | | | ----------------------------------------- | | | | | | LCS("abc", "ab") LCS("bc", "dab") | | | | | | 1 + LCS("bc", "b") --------------- | | | | | | | | | 2 + LCS("c", "") LCS("c", "dab") LCS("bc", "ab") | | ------------- | | | | | | LCS("c", "ab") LCS("bc", "b") | 1 + LCS("c", "") 给出一段伪代码...