【完虐算法】「字符串-最长公共子序列」全面总结

本文详细介绍了如何使用动态规划解决LeetCode中的「最长公共子序列」问题。通过一个具体的例子,解释了动态规划的四步骤:动态数组定义、初始化、状态转移方程和优化,以及如何对二维数组进行填充。文章最后提到了动态规划的空间优化可能性。
摘要由CSDN通过智能技术生成

LeetCode专题「字符串」现在准备到了 5 期内容来啦。

本来想要把「最长公共子序列」和「最长上升子序列」一起和大家把思路分享一下,都属于可以使用动态规划的思想进行解决。但貌似还是两块内容。

所以,今天先把「最长公共子序列」分享出来和大家聊聊。

后面再出一期把「最长上升子序列」详细的分享,后面这一期内容估计会比较多。

题外话,上一期的抽书活动还没有结束,感兴趣的可以继续参与哈!【 豆瓣9.4分,3本《深度学习入门》今天送给大家 】

说在前面

言归正传,这一期来说说字符串的第五块内容 「字符串 - 最长公共子序列」

整体架构:

字符串 - 最长公共子序列

今天这期内容是字符串的第 5 期。

之前谈到过 子串和子序列的区别 ,子串指的是向字符串截取固定长度的子字符串。

而子序列在LeetCode有过解释:

一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

既然是公共子序列,涉及到的肯定 至少是两个字符串 的公共子序列比较

比如:

text1 = "abcde", text2 = "ace"

它的公共元素就是"ace"。

如何在两个字符串中找到其公共的公共的部分,首先想到的肯定是暴力求解,逐项对比。最先想到,然而也是最先放弃的,因为时间复杂度最高。这块也不做讨论。

其次,最先想到的是动态规划来解决,记录遍历时的每一个状态。

关于动态规划的部分,之前已经完整的写过一篇,超过万字,非常全面【 终拿字节Offer...动态规划复盘... 】

案例

整体关于字符串「最长公共子序列」方面的问题一般来说都会用动态规划的思想去解决!

下面会通过一个典型案例具体来看是怎么解决的,使用 LeetCode 的 1143 题 进行举例。

1143.最长公共子序列【中等】

1143.最长公共子序列【中等】

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列的长度。如果不存在公共子序列 ,返回 0 。

一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值