动态规划5-最长公共子序列和子串问题LCS

本文介绍了如何解决最长公共子序列和最长公共子串问题,通过动态规划的方法,给出状态转移方程和解题思路,并提供了测试用例及输出结果。
摘要由CSDN通过智能技术生成

大佬任意门1
大佬任意门2-更详细一点

问题描述

给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。

X = BDCABA Y = ABCBDAB
则这两个字符串的最长公共子序列长度为4,LCS是:BCBA
解题思路

设xi是X的元素,yj是Y的元素,X = (x1, x2, …, xm),Y = (y1, y2, …, yn),最长公共子序列为Z = (z1, …, zk)

1)如果xm = yn,说明该元素一定在公共子序列中。

2)如果xm ≠ yn,说明要么xm一定不在最长公共子序列中,要么yn一定不在公共子序列中。

所以综上可以得出最长公共子序列的状态方程,dp[i][j]表示(x1,x2,…,xi)和(y1, y2,…, yj)的最长公共子序列的长度。
d p [ i ] [ j ] = { d p [ i − 1 ] [ j − 1 ] , 若 i , j > 0 , x i = y j m a x ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) , 若 i , j > 0 , x i ≠ y j

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值