这一题验证的示例有问题(已经提交反馈),顺便写一下python解法

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

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

对于输入

abc
dabddabcef

应该得到输出:

abc

而不是ab
下面是Python的一种解法(HJ75公共串计算 也可以用这个方法求解)

# 思路一:对短串前后同时夹逼(遍历),这样子只要找到第一个符合要求的这一轮循环就可以停止
while True:
    try:
        shorter, longer = sorted([input(), input()], key=len)
        res_li = []
        l = len(shorter)
        # print(f'短:{shorter}', f'长:{longer}')
        for i in range(l):
            for j in range(l-1, -1, -1):
                s = shorter[i:j+1]
                if s in longer:
                    res_li.append(s)
                    break    # 这里找到的是本轮循环的最长匹配串
        print(max(res_li, key=len) if len(res_li) != 0 else '')
    except EOFError:
        break
全部评论
你遍历的时候短字符串一次长度减了2,减1的情况被忽略了
点赞 回复 分享
发布于 2021-04-05 02:26

相关推荐

01-21 12:26
暨南大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务