先来n空间复杂度的。第一个函数是用来打印的
def print_substring(index_list,B,maxs):
for value in index_list:
strings = []
for i in range(maxs):
strings.append(B[value[0]-i])
strings.reverse()
print("substring are : %s" %strings)
def substring():
A= 'china_blue'
B = 'clues'
index_list=[]
maxs = 0
m = len(A)
n = len(B)
log_pre = [0 for j in range(m)]
log_now = [0 for j in range(m)]
for i in range(n):
for j in range(m):
if B[i] == A[j]:
log_now[j] = log_pre[j-1]+1
else:
log_now[j] = 0
log_pre = log_now[:]
local_maxs = max(log_now)
if local_maxs>=maxs:
maxs = local_maxs
index = (i,log_now.index(maxs),maxs)
index_list.append(index)
index_list = list(filter(lambda x:x[-1]==maxs,index_list))
print("the length is %d" %maxs)
print_substring(index_list,B,maxs)