有两个字符串(可能包含空格),请找出其中最长的公共连续子串,输出其长度。
LCS问题就是求两个字符串最长公共子串
的问题。
解法:
用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。
求出对角线最长的1的序列,其对应的位置就是最长匹配子串的位置。
def find_lcsubstr(s1, s2):
m = [[0 for i in range(len(s2) + 1)] for j in range(len(s1) + 1)] # 生成0矩阵,为方便后续计算,比字符串长度多了一列
mmax = 0 # 最长匹配的长度
for i in range(len(s1)):
for j in range(len(s2)):
if s1[i] == s2[j]:
m[i + 1][j + 1] = m[i][j] + 1
mmax = max(mmax, m[i + 1][j + 1])
return mmax # 返回最长长度
print(find_lcsubstr(input(), input()))