题解 | #查找两个字符串a,b中的最长公共子串#
查找两个字符串a,b中的最长公共子串
http://www.nowcoder.com/practice/181a1a71c7574266ad07f9739f791506
子串搜索
- 基于较短的字符串进行子串划分;
- 子串长度由长到短,顺序由前向后,发现子串在较长字符串中存在时,返回子串。
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)