【面试题】求最长公共子串 or 最长公共子序列

最长公共子串

动态规划,设dp[i][j]表示str1的前i个字符和str2的前j个字符的最长公共子串,且子串的最后一位是str1[i]和str2[j]。初始化i0 或者 j0的所有状态。
所以,当str1[i] == str2[j] 时,dp[i][j] = dp[i-1][j-1] + 1。否则dp[i][j] = 0;

最长公共子序列

动态规划,dp[i][j]表示str1的前i个字符和str2的前j个字符的最长公共子序列长度。初始化i0或者j0的所有状态。
当str1[i] == str2[j]时,dp[i][j] = dp[i-1][j-1] + 1,否则 dp[i][j] = max(dp[i-1][j], dp[i][j-1) + 1。

发布了323 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/iCode_girl/article/details/105371570