为了统一化操作且不越界,保证s的长度小于t的长度。内部循环比较过程中,若相等,则为pre[ni-1]+1,否则为pre[ni]与cur[ni-1]的最大值。
def longest_common_sub(s, t):
if len(s) > len(t):
s, t = t, s
n, m = len(s), len(t)
pre, cur = [0]*(n+1), [0]*(m+1)
for mi in range(1, m+1):
pre, cur = cur, pre
for ni in range(1, n+1):
if s[ni-1] == t[mi-1]:
cur[ni] = pre[ni-1]+1
else:
cur[ni] = max(cur[ni-1], pre[ni])
return cur[-1]
s, t = 'watkins', 'watson'
print(longest_common_sub(s, t)) # 4
(最近更新:2019年09月06日)
1138

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



