最后更新于
最后更新于
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。
一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。
若这两个字符串没有公共子序列,则返回 0。
示例 1:
示例 2:
示例 3:
提示:
1 <= text1.length <= 1000
1 <= text2.length <= 1000
输入的字符串只含有小写英文字符。
代码如下:
使用滚动数组的思想对使用的空间进行优化, 原本二维的状态转移表的空间复杂度为, 其中和分别是两个字符串的长度. 观察状态转移方程, 对于, 使用到的所有依赖为, , . 所以我们仅存储:
上一列的结果
这样, 从前到后(状态表从上到下)循环时, 在计算, 已经计算得到了, 覆盖了. 这样我们就能计算得到, 用来覆盖, 从而在列的维度上逐步推进.
需要注意覆盖了的值, 而在计算又需要的值, 因此需要一个额外的标量变量来存储左上角(即)的值.