Python3 动态规划

查找两个字符串a,b中的最长公共子串

http://www.nowcoder.com/questionTerminal/181a1a71c7574266ad07f9739f791506

while True:
    try:
        s1 = input()
        s2 = input()
        if len(s1) > len(s2):
            s1, s2 = s2, s1
        m, n = len(s1), len(s2)
        dp = [[0] * (n+1) for _ in range(m+1)]
        index, max_len = 0, 0
        for i in range(1, m+1):
            for j in range(1, n+1):
                if s1[i-1] == s2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                    if dp[i][j] > max_len:
                        max_len = dp[i][j]
                        index = i
                else:
                    dp[i][j] = 0
        print(s1[index-max_len:index])
    except:
        break
全部评论
请问,为什么要让是保持s1更短了,我尝试去掉这个操作,测试集没有通过,但是没想明白这其中的原因,可以麻烦讲解一下么?
点赞 回复 分享
发布于 2021-03-21 02:41
题目要求:若有多个,输出在较短串中最先出现的那个。
点赞 回复 分享
发布于 2021-03-23 15:30
else: dp[i][j] = 0 是不是应该换成dp[i][j] = dp[i-1][j-1]?
点赞 回复 分享
发布于 2021-08-18 20:45

相关推荐

在校生实习:我觉得平时学校肯定有各种大作业吧。包装一下写项目里。特长那块喧宾夺主了,项目肯定是大头。特长里比如:熟悉vscode,这个感觉不具有吸引性。简要介绍你会什么语言,什么工具等就行了。同26找实习,我是个超级菜鸡😭大家一起加油
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
9 3 评论
分享
牛客网
牛客企业服务