BM65 最长公共子序列(二)动态规划

BM65动态规划专项牛客链接

问题描述:

给定两个字符串str1和str2,输出两个字符串的最长公共子序列。如果最长公共子序列为空,则返回"-1"。目前给出的数据,仅仅会存在一个最长的公共子序列

思路分析:

初读题目首先要解决的问题是区分子串和子序列:

1.子串:对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符串。字符串"adereegfbw"本身也属于它本身最长的子串。

2子序列:一个字符串的子序列是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

解决了这个问题,我们需要思考该问题的子问题是什么?

通过我们对测试用例的模拟我们发现两个字符串如果同时从末尾位置开始比较会有以下两种情况:

1.该位置上两个字符串的字符相同,如果是这种情况的话我们不难发现,该字符一定是他们最长公共子序列的字符而且是已发现的公共子序列的前一个位置的字符;

2.该位置上两个字符串的字符不相同,如果是这种情况我们就需要判断如何进行取舍?是应该放弃第一个字符串的当前位置字符还是第二个字符串的,由于我们所求的是两个字符串的最长公共子序列,所以我们取

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值