A-M baby
This commit is contained in:
parent
764da6cbbb
commit
db842d013d
19005 changed files with 197040 additions and 7 deletions
|
|
@ -0,0 +1,12 @@
|
|||
def lcs(xstr, ystr):
|
||||
"""
|
||||
>>> lcs('thisisatest', 'testing123testing')
|
||||
'tsitest'
|
||||
"""
|
||||
if not xstr or not ystr:
|
||||
return ""
|
||||
x, xs, y, ys = xstr[0], xstr[1:], ystr[0], ystr[1:]
|
||||
if x == y:
|
||||
return x + lcs(xs, ys)
|
||||
else:
|
||||
return max(lcs(xstr, ys), lcs(xs, ystr), key=len)
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
if __name__=="__main__":
|
||||
import doctest; doctest.testmod()
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
def lcs(a, b):
|
||||
lengths = [[0 for j in range(len(b)+1)] for i in range(len(a)+1)]
|
||||
# row 0 and column 0 are initialized to 0 already
|
||||
for i, x in enumerate(a):
|
||||
for j, y in enumerate(b):
|
||||
if x == y:
|
||||
lengths[i+1][j+1] = lengths[i][j] + 1
|
||||
else:
|
||||
lengths[i+1][j+1] = \
|
||||
max(lengths[i+1][j], lengths[i][j+1])
|
||||
# read the substring out from the matrix
|
||||
result = ""
|
||||
x, y = len(a), len(b)
|
||||
while x != 0 and y != 0:
|
||||
if lengths[x][y] == lengths[x-1][y]:
|
||||
x -= 1
|
||||
elif lengths[x][y] == lengths[x][y-1]:
|
||||
y -= 1
|
||||
else:
|
||||
assert a[x-1] == b[y-1]
|
||||
result = a[x-1] + result
|
||||
x -= 1
|
||||
y -= 1
|
||||
return result
|
||||
Loading…
Add table
Add a link
Reference in a new issue