二阶DP
DP[i][j]的意义是
s1和s2之间以s1[i]和s2[j]位置元素为结尾的连续公共子串长度
最后取DP中最大的数即可
s1 = input()
s2 = input()
m = len(s1)
n = len(s2)
dp = []
for _ in range(m):
dp.append([0 for _ in range(n)])
maxa = 0
#先填第一行
for i in range(n):
if s1[0] != s2[i]:
continue
else:
dp[0][i] = 1
maxa = 1
for i in range(m):
if s2[0] != s1[i]:
continue
else:
dp[i][0] = 1
maxa = 1
for i in range(1,m):
for j in range(1,n):
if s1[i] != s2[j]:
dp[i][j] = 0#max(dp[i-1][j],dp[i][j-1])
elif s1[i] == s2[j]:
dp[i][j] = dp[i-1][j-1] + 1
maxa = max(maxa,dp[i][j])
print(maxa)