如何找到两个序列中最长的共同子序列?
- 内容介绍
- 文章标签
- 相关推荐
本文共计928个文字,预计阅读时间需要4分钟。
1. 长度最长的共同子序列(Longest Common Subsequence; LCS)给定两个序列,找出这两个序列中存在的最长共同子序列。这个子序列不要求连续,但字符顺序必须一致。
1.最长共同子序列(LongestCommonSubsequence;LCS)给定两个序列,找出两个序列中存在的最长子序列的长1. 最长共同子序列 (Longest Common Subsequence; LCS)
给定两个序列,找出两个序列中存在的最长子序列的长度。子序列是指以相同的相对顺序出现,但不一定是连续的序列 称为「最长共同子序列」(Longest Common Subsequence; LCS)」
示例: 序列“ ABCDGH”和“ AEDFHR”的LCS为长度3的“ ADH”。 序列“ AGGTAB”和“ GXTXAYB”的LCS为长度4的“ GTAB”。
解题思路
首先看一个2个字符串abcdefg和cef 要想求2个字符串最后一个位置的LCS,我们需要在下面3中情况中取最大值 如果最后一个字符不相等,则我们在下面两种情况中取一个最大值
第一个字符串取最后一个位置和第二个字符串不取最后一个位置,即abcdefg和ce 第一个字符串不取最后一个位置和第二个字符串取最后一个位置,即abcdef和cef 如果最后一个字符相等,我们只需要把前面的子串的LCS长度(即abcdef和ce)加上最后一个最后一个字符是否相等,相等为1,不等为0。 这里有一个问题就是,为什么当两个字符串最后一个字符相等的时候,我们取了最终就一定可以得到LCS了? 比如abcd和bdd, 如果我们两个字符串都不取最后一个d,则剩下的串为abc和bd,前面构成的LCS一定比取最后一个少1。
本文共计928个文字,预计阅读时间需要4分钟。
1. 长度最长的共同子序列(Longest Common Subsequence; LCS)给定两个序列,找出这两个序列中存在的最长共同子序列。这个子序列不要求连续,但字符顺序必须一致。
1.最长共同子序列(LongestCommonSubsequence;LCS)给定两个序列,找出两个序列中存在的最长子序列的长1. 最长共同子序列 (Longest Common Subsequence; LCS)
给定两个序列,找出两个序列中存在的最长子序列的长度。子序列是指以相同的相对顺序出现,但不一定是连续的序列 称为「最长共同子序列」(Longest Common Subsequence; LCS)」
示例: 序列“ ABCDGH”和“ AEDFHR”的LCS为长度3的“ ADH”。 序列“ AGGTAB”和“ GXTXAYB”的LCS为长度4的“ GTAB”。
解题思路
首先看一个2个字符串abcdefg和cef 要想求2个字符串最后一个位置的LCS,我们需要在下面3中情况中取最大值 如果最后一个字符不相等,则我们在下面两种情况中取一个最大值
第一个字符串取最后一个位置和第二个字符串不取最后一个位置,即abcdefg和ce 第一个字符串不取最后一个位置和第二个字符串取最后一个位置,即abcdef和cef 如果最后一个字符相等,我们只需要把前面的子串的LCS长度(即abcdef和ce)加上最后一个最后一个字符是否相等,相等为1,不等为0。 这里有一个问题就是,为什么当两个字符串最后一个字符相等的时候,我们取了最终就一定可以得到LCS了? 比如abcd和bdd, 如果我们两个字符串都不取最后一个d,则剩下的串为abc和bd,前面构成的LCS一定比取最后一个少1。

