· 这里是子序列,不是子串,所以不要求连续
初始状态与转换方程
这里需要注意的事:
- dp[i][j] 表示str1的前i项与str2的前j项的公共子序列的长度,所以如果i=0或j=0,dp[i][j]=0
- 为了容易理解,我们设置数组str1与str2都是从1开始,这样,获取dp[i][j],即str1的前i项,与str2的前j项,就可以通过判断str1[i]与str2[j]获得。
最长公共子序列的获取
逆过程
- 因为只有当str1[i]=str2[j]时,i和j同时增加,逆过程则同时减少
- 正过程是dp[i-1][j]与dp[i][j-1] 谁大选择谁,逆过程则谁大谁减少
1 |
|