class Solution:
def longestCommonSubsequence(self,text1: str, text2: str) -> int:
len1 = len(text1)
len2 = len(text2)
result = [[0 for i in range(0, len2 + 1)] for j in range(0, len1 + 1)]
for i in range(1, len1 + 1):
char_in_text1 = text1[i - 1]
for j in range(1, len2 + 1):
char_in_text2 = text2[j - 1]
if char_in_text1 == char_in_text2:
result[i][j] = result[i - 1][j - 1] + 1
else:
result[i][j] = max(result[i - 1][j], result[i][j - 1])
return result[len1][len2]
题目:
力扣
知识点:
二维数组的初始化
动态规划:
1,小结:
a,在给定约束条件下优化某种指标
b,动态规划解决方案可使用二维数组辅助理解
2,实际应用:
a,git diff等命令来判断两个文件的差异
b,编辑距离的计算等
提交时出错的点:
1,二维数组的初始化
出错原因:
a,行列搞反了,导致运行时数组越界
b,对于0行、0列的数据赋值,并不清楚怎么去进行边界值校验。参考了题解中的将0行及0列赋值为0,创建一个(len1 + 1) * (len2 + 1)的二维数组,而不是len1 * len2。用于对空字符串的判断这种思路,解决了边界值判断和异常处理。
2,其他
在开始写时把字符串转成了数组,然后操作了数组进行后续操作(不知道写的时候在想什么
参考资料:
题解 - 力扣
《算法图解》