动态规划-最长公共子字符串

99 阅读1分钟

最长公共子串,是指两个字符串中最长连续相同的子串长度。例如:str1=“1AB2345CD”,str2=”12345EF”,则str1,str2的最长公共子串为2345。

解法

如果 str1 的长度为 N,str2 的长度为 M,生成大小为 N*M 的 数组 dp , dp[i][j]表示 str1[0…i] 与 str2[0…j] 的最长公共子串的长度。

考虑边界条件

假如str1为空字符串或str2为空字符串,则str1,str2的最长公共子串为""

考虑递推公式

str1的第i个字符等于str2的第j个字符时候,dp[i][j] = dp[i-1][j-1]+1;

str1的第i个字符不等于str2的第j个字符时候,dp[i][j] = 0;

最终结果

由于最长公共子字符串不一定在字符串最末尾,所以需要再次遍历dp[i][j],找到最大值即可

代码