如何找到两个序列中最长的共同子序列?

2026-04-02 14:190阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计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。

阅读全文