美文网首页
最长公共连续子序列和最长公共子序列

最长公共连续子序列和最长公共子序列

作者: 愤怒的熊猫V | 来源:发表于2019-08-08 23:11 被阅读0次

最长公共序列:

A[1,3,5,2,5,3,4,5]  长度为m

B:[3,4,2,1,5]           长度为n

则它们的最长公共子序列为3,2,5

我们用LCS(xi,yj)来表示xi和yj的最长公共子序列的长度

那么当xi = yj时,我们就可以把xi和yj都往前移动一步来进行探索

即LCS(xi,yj) = LCS(xi-1,yj-1)+1

如果不相等,则要么把x往前移动一步,要么把y往前移动一步,看谁更大

即LCS(xi,yj) = max(LCS(xi-1,yj),LCS(xi,yj-1))

综上if xi == yj:

           LCS(xi,yj) = LCS(xi-1,yj-1)+1

        else:

            LCS(xi,yj) = max(LCS(xi-1,yj),LCS(xi,yj-1))

如果要求这个最长子序列是什么

那么我们就追根溯源

i = m-1 ,j = n-1

s = ""

while i >= 0 and j >= 0:                  #只要有一个为0就停止

    if xi == yj:

        s += xi

    else:

        if   LCS(xi-1,yj)>LCS(xi,yj-1):

                i    -=   1

         else:

                j      -=   1

return s[::-1]

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------如果是连续子序列问题

我们就换个思路,我们的关注点就应该在连续上面

其实画一个m*n的矩阵,只有在连续的这些对角线上才有值,且值是递增的

所以,我们可以用一个不一样的角度的dp方程来表达

dp[i][j] = 0          如果i == 0  and  j  ==  0

dp[i][j]   =    dp[i-1][j-1]  +  1             xi == yj

dp[i][j]  =  0                                xi    !=    yj

相关文章

  • 算法(04)动态规划

    零钱问题 背包问题 最长公共子序列 最长公共子串 最长上升子序列 最大连续子序列和

  • 最长公共子序列和最长公共子串

    最长公共子序列和最长公共子串区别 最长公共子串(Longest CommonSubstring)和最长公共子序列(...

  • LCS问题

    LCS问题包括最长公共子序列和最长公共子串,其中,最长公共子串要求必须连续。 对于二者的求解方式 最长公共子序列:...

  • 公共子序列问题

    最长公共子序列 最长上升子序列 最长公共上升子序列

  • 动态规划 最长公共子串

    核心思路和最长公共子序列一样 区别在于子串必须连续 可以先看我之前这篇文章最长公共子序列问题总结 最长公共子串同样...

  • 最长递增子序列: 动态规划和LCS(最长公共子序列)

    最长递增子序列: 动态规划和LCS(最长公共子序列)子序列和子串的区别:子序列不连续,字串连续。这个题两种解法 动...

  • 最长公共字串和最长公共子序列

    最长公共字串,字符必须连续 最长公共子序列,字符不需要连续

  • 子序列问题

    最长公共子序列 最长上升/下降/不升/不降子序列

  • 子串 子序列 总结

    最长公共子串 子串的要求比子序列严格,所以可以讨论子串的终点 最长公共子序列 DP解 递归+memo 最长公共回文...

  • 算法问题清单

    最大子序列和最长公共子序列最长公共子串大整数相乘/除/加数组最大乘积

网友评论

      本文标题:最长公共连续子序列和最长公共子序列

      本文链接:https://www.haomeiwen.com/subject/ydlqjctx.html