题目:编写函数,获取两段字符串的最长公共子串的长度
例如:
S1 = GCCCTAGCCAGDE
S2 = GCGCCAGTGDE
这两个序列的最长公共字串为GCCAG,也就是说返回值为5。
参数:str1和str2表示两个字符串
返回值:返回两段字符串的最长公共子串的长度
int findLargestSizeString(String str1, String str2)
此题为动态规划问题,在笔试题中遇到,开始想法为暴力穷举,参考资料,归类为【动态规划】问题。
时间复杂度O(M*N) 额外空间复杂度为O(M*N),经过优化可将空间复杂度降为O(1)。
动态规划:
1.生成动态规划表 M*N的矩阵
2.dp[i][j]的含义为在必须以arr1[i]和arr2[j]当作公共子串最后一个字符的情况下,公共子串的长度。
dp矩阵: