最长公共子串,是指两个字符串中最长连续相同的子串长度。例如: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],找到最大值即可