我写了这些函数(它有效),以找到两个字符串中最长的共同后继序列。
def lcs_grid(xs, ys):
grid = defaultdict(lambda: defaultdict(lambda: (0,"")))
for i,x in enumerate(xs):
for j,y in enumerate(ys):
if x == y:
grid[i][j] = (grid[i-1][j-1][0]+1, \ )
else:
if grid[i-1][j][0] > grid[i][j-1][0]:
grid[i][j] = (grid[i-1][j][0], < )
else:
grid[i][j] = (grid[i][j-1][0], ^ )
return grid
def lcs(xs,ys):
grid = lcs_grid(xs,ys)
i, j = len(xs) - 1, len(ys) - 1
best = []
length,move = grid[i][j]
while length:
if move == \ :
best.append(xs[i])
i -= 1
j -= 1
elif move == ^ :
j -= 1
elif move == < :
i -= 1
length,move = grid[i][j]
best.reverse()
return best
是否有人提议修改函数 st. t., 他们可以打印三个字符串中最长的常见子序列? I. e. 函数调用为 : < code> lcs (str1, str2, str3) code>
直到现在,我用减值声明来管理它, 但我想有一个功能, 真正打印出后继序列 而不减值 - 声明。