题解 | #最长公共子串#

最长公共子串

https://www.nowcoder.com/practice/02e7cc263f8a49e8b1e1dc9c116f7602

# -*- coding:utf-8 -*-

class LongestSubstring:
    def findLongest(self, A, n, B, m):
        # write code here
        dp = [ [0 for _ in range(m+1)] for __ in range(n+1) ]
        max_res = 0
        for i in range(1,n+1):
            for j in range(1,m+1):
                # print(i,j,len(A),len(B))
                if A[i-1]==B[j-1]:
                    dp[i][j] = dp[i-1][j-1]+1
                    max_res = max(max_res,dp[i][j])
        return max_res

和评论区大佬们说的差不多,就是和“最长公共子序列”的题目有点不一样,这个必须得是公共子串,所以在处理A[i]!=B[j]的时候,不管就可以了。dp矩阵的含义就是:当前连续相等的长度。由于这个是从小到大遍历的,所以当A[i]==B[j]的时候会去找dp[i-1][j-1],如果dp[i-1][j-1]已经大于0(当然等于0也OK),那就说明这之前就已经有连续相等的了,现在再多一个,所以状态转移方程是:dp[i][j]=dp[i-1][j-1]+1,然后如果不等于,那就说明无论去前面找哪个,一旦到了这里都不再是连续的子串了,直接置为0,所以状态转移方程再添加一种情况:dp[i][j] = 0 if A[i]!=B[j]。

全部评论

相关推荐

24分钟1.自我介绍2.黑盒测试用例设计方法3.运用刚才的测试方法对手机端淘宝购物车结算页面进行测试4.测试流程5.需求文档没有标明边界值,怎么确定边界值,确定边界值后怎么测6.你们公司自动化测试是测业务主流程还是新需求反问:不足之处答:问答问题前思考3s再答,针对提问再答
一笑而过2222:边:边界值分析法(处理输入边界) 类:等价类划分法(划分有效 / 无效输入) 定:判定表法(多条件组合的逻辑判定) 因:因果图法(分析输入输出的因果关系) 迁:状态迁移法(覆盖系统状态转换路径) 场:场景法(模拟端到端业务流程) 正:正交试验法(多因素组合的测试优化) 错:错误推测法(基于经验推测潜在漏洞) 记忆逻辑链(按测试场景优先级排序) 先处理明确输入:边界值 + 等价类(边类) 再处理条件组合:判定表 + 因果图(定因) 接着处理状态与流程:状态迁移 + 场景法(迁场) 最后优化多因素与补漏:正交试验 + 错误推测(正错)
查看6道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务