最长公共子序列问题
问题描述
最近适逢秋招,于是刷了一些题。腾讯的某道题完全没有思路,看到的网上解析遂发觉了这么个经典的“模板问题”。
输入: String_1: abcdaf String_2: acbcf
输出:最长公共子序列(abcf)或长度(4)
思路方法
别的方法就不进行赘述了。
首先根据两个字符串的长度m,n生成一个(m + 1)x (n + 1)的数组dp,并且令dp[m][0] = 0,dp[0][n] = 0。为什么这么做呢,这里来解释一下:
我这里借鉴了一下B站上某个外国人的做法。我们先这样做,然后依靠我们人为的去进行判断,主要目的是为了填空。动态规划是以空间换时间的利器吧,有了上个状态,经过我们的状态转移方程就可以推的下一阶段的状态。在这儿,每次操作的状态其实就是dp[i][j]的值。好,让我们进行填空。
1.如上图所示,我们看一下两个星星所标记的行和列