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

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
点赞 评论 收藏
分享
9 3 评论
分享
牛客网
牛客企业服务