题解 | #公共子串计算#

公共子串计算

https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b

思路:滑块移动法。滑块长度初始为短串的长度,之后滑块长度单位递减。
①找到的第一个公共子串则为最长子串;②若无公共子串则输出0
s1 = input()
s2 = input()
if len(s1) > len(s2): # 始终将短串赋给s1
    s1, s2 = s2, s1
k = len(s1) # 滑块长度初始为短串的长度
l = []
while k > 0:
    for i in range(len(s1) - k + 1):
        if s1[i:i+k] in s2: # 若找到最长公共子串,将其添加到列表l,并立即结束for循环
            l.append(s1[i:i+k])
            break
    if len(l): # 若l非空则返回元素长度,并结束while循环
        print(len(l[0]))
        break
    k -= 1 # 滑块长度单位递减
else: # 最终没有公共子串输出0
    print(0)


全部评论

相关推荐

投票
我要狠拿offer:如果不是必须去成都绝对选九院呀,九院在四川top1研究所了吧
点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务