题解 | #公共子串计算#

公共子串计算

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)


全部评论

相关推荐

我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务