[Python][LeetCode][剑指 Offer II 095. 最长公共子序列]

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,其他

在开始写时把字符串转成了数组,然后操作了数组进行后续操作(不知道写的时候在想什么

参考资料:

题解 - 力扣

《算法图解》

你可能感兴趣的:(做题家的错题本,leetcode,python)