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

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

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

子串搜索

  1. 基于较短的字符串进行子串划分;
  2. 子串长度由长到短,顺序由前向后,发现子串在较长字符串中存在时,返回子串。
def find_long_sub_str(a: str, b: str) -> str:
    na, nb = len(a), len(b)
    if na > nb:
        n = nb
        s = b
        p = a
    else:
        n = na
        s = a
        p = b
    for L in range(n, 0, -1):
        # L表示公共子串的长度
        for i in range(n):
            # 右边界超出,实际长度不能满足L
            if L + i + 1 > n:
                break
            sub_str = s[i: L + i + 1]
            # print(f'sub str is {sub_str}')
            if sub_str in p:
                return sub_str
    return ''


a = input()
b = input()
c = find_long_sub_str(a, b)
print(c)
全部评论

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务