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

该代码实现了求解两个字符串的最长公共子序列问题,采用动态规划方法。初始化二维数组时注意边界条件,避免数组越界,特别处理空字符串的情况。动态规划表的填充根据字符是否相等决定,若相等则前一子序列加一,否则取最大值。此算法还可应用于计算文件差异和编辑距离。
摘要由CSDN通过智能技术生成

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

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

参考资料:

题解 - 力扣

《算法图解》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值