LeetCode专题「字符串」现在准备到了 5 期内容来啦。
本来想要把「最长公共子序列」和「最长上升子序列」一起和大家把思路分享一下,都属于可以使用动态规划的思想进行解决。但貌似还是两块内容。
所以,今天先把「最长公共子序列」分享出来和大家聊聊。
后面再出一期把「最长上升子序列」详细的分享,后面这一期内容估计会比较多。
题外话,上一期的抽书活动还没有结束,感兴趣的可以继续参与哈!【 豆瓣9.4分,3本《深度学习入门》今天送给大家 】
说在前面
言归正传,这一期来说说字符串的第五块内容 「字符串 - 最长公共子序列」
整体架构:
字符串 - 最长公共子序列
今天这期内容是字符串的第 5 期。
之前谈到过 子串和子序列的区别 ,子串指的是向字符串截取固定长度的子字符串。
而子序列在LeetCode有过解释:
一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。
既然是公共子序列,涉及到的肯定 至少是两个字符串 的公共子序列比较
比如:
text1 = "abcde", text2 = "ace"
它的公共元素就是"ace"。
如何在两个字符串中找到其公共的公共的部分,首先想到的肯定是暴力求解,逐项对比。最先想到,然而也是最先放弃的,因为时间复杂度最高。这块也不做讨论。
其次,最先想到的是动态规划来解决,记录遍历时的每一个状态。
关于动态规划的部分,之前已经完整的写过一篇,超过万字,非常全面【 终拿字节Offer...动态规划复盘... 】
案例
整体关于字符串「最长公共子序列」方面的问题一般来说都会用动态规划的思想去解决!
下面会通过一个典型案例具体来看是怎么解决的,使用 LeetCode 的 1143 题 进行举例。
1143.最长公共子序列【中等】
1143.最长公共子序列【中等】
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列的长度。如果不存在公共子序列 ,返回 0 。
一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变