# 最长公共子串
# 子串是连续的
from collections import defaultdict
string1 = "abvbaccvbs"
string2 = "abcavbs"
m, n = len(string1), len(string2)
dp = [[0] * (n + 1) for i in range(m + 1)]
length2idx = defaultdict(list)
for i in range(1, m + 1):
for j in range(1, n + 1):
if string1[i - 1] == string2[j - 1]:
value = dp[i - 1][j - 1] + 1
dp[i][j] = value
length2idx[value].append(i)
max_length = max(length2idx.keys())
substrings = [string1[i - max_length:i] for i in length2idx[max_length]]
print(substrings)