参考:手写代码必备手册
__author__ = 'Administrator'
def lcs(x,y):
d = [0] * (len(x) + 1)
for i in range(0,len(d)):
d[i] = [0] * (len(y) + 1)
for i in range(1,len(x) + 1):
for j in range(1, len(y) + 1):
if x[i-1] == y[j-1]:
d[i][j] = d[i-1][j-1] + 1
else:
d[i][j] = max(d[i-1][j],d[i][j-1])
print d
def lcs_extend(x,y):
d = [0] * (len(x) + 1)
p = [0] * (len(x) + 1)
for i in range(0,len(d)):
d[i] = [0] * (len(y) + 1)
p[i] = [0] * (len(y) + 1)
for i in range(1,len(x) + 1):
for j in range(1, len(y) + 1):
if x[i-1] == y[j-1]:
d[i][j] = d[i-1][j-1] + 1
p[i][j] = 1
elif d[i-1][j] > d[i][j-1]:
d[i][j] = d[i-1][j]
p[i][j] = 2
else:
d[i][j] = d[i][j-1]
p[i][j] = 3
print d
print p
lcs_print(x,y,len(x),len(y),p)
def lcs_print(x,y,lenX,lenY,p):
if lenX == 0 or lenY == 0:
return
if p[lenX][lenY] == 1:
lcs_print(x,y,lenX-1,lenY-1,p)
print x[lenX-1],
elif p[lenX][lenY] == 2:
lcs_print(x,y,lenX-1,lenY,p)
else:
lcs_print(x,y,lenX,lenY-1,p)
x = 'abcdf'
y = 'facefff'
lcs_extend(x,y)
本文介绍了一种求解两个字符串最长公共子序列(LCS)的算法实现,并通过具体示例展示了如何使用动态规划方法逐步求解最长公共子序列的过程。代码中详细实现了基本的LCS算法以及扩展版本,后者不仅计算出最长公共子序列的长度,还能打印出具体的子序列。
&spm=1001.2101.3001.5002&articleId=51097539&d=1&t=3&u=37fa881da1484e22b0e8e4f67a8bbc19)
29万+

被折叠的 条评论
为什么被折叠?



