1143. 最长公共子序列
分析
-
定义状态:
f[i][j]表示字符串text1的前i个字符与text2的前j个字符的最长公共子序列的长度
-
状态转移:
-
当
text1[i-1] == text2[j-1],当前字符匹配,可以延续公共子序列的长度:f[i][j] = f[i-1][j-1] + 1 -
当
text1[i-1] != text2[j-1],当前字符不匹配,最长公共子序列取决于舍弃其中一个字符的结果:f[i][j] = \max(f[i-1][j], f[i][j-1])
-
-
边界条件:
f[i][0] = 0和f[0][j] = 0,表示任意一个字符串与空字符串的最长公共子序列长度为0
-
结果:
- 最终结果存储在
f[n][m],其中n和m分别是text1和text2的长度
- 最终结果存储在
时间复杂度
外层循环遍历 n,内层循环遍历 m ,时间复杂度为 O(nm)
空间复杂度
空间复杂度为 O(nm)
C++代码
|
|