subtree(users/wpcarro): docking briefcase at '24f5a642'
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
This commit is contained in:
commit
019f8fd211
766 changed files with 175420 additions and 0 deletions
47
users/wpcarro/scratch/facebook/edit-distance.py
Normal file
47
users/wpcarro/scratch/facebook/edit-distance.py
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
def print_grid(grid):
|
||||
result = []
|
||||
for row in grid:
|
||||
result.append(" ".join(str(c) for c in row))
|
||||
return print("\n".join(result))
|
||||
|
||||
def edit_distance(a, b):
|
||||
"""
|
||||
Compute the "edit distance" to transform string `a` into string `b`.
|
||||
"""
|
||||
grid = []
|
||||
for row in range(len(a) + 1):
|
||||
r = []
|
||||
for col in range(len(b) + 1):
|
||||
r.append(0)
|
||||
grid.append(r)
|
||||
|
||||
# left-to-right
|
||||
# populate grid[0][i]
|
||||
for col in range(len(grid[0])):
|
||||
grid[0][col] = col
|
||||
|
||||
# top-to-bottom
|
||||
# populate grid[i][0]
|
||||
for row in range(len(grid)):
|
||||
grid[row][0] = row
|
||||
|
||||
for row in range(1, len(grid)):
|
||||
for col in range(1, len(grid[row])):
|
||||
# last characters are the same
|
||||
if a[0:row][-1] == b[0:col][-1]:
|
||||
grid[row][col] = grid[row - 1][col - 1]
|
||||
else:
|
||||
# substitution
|
||||
s = 1 + grid[row - 1][col - 1]
|
||||
# deletion
|
||||
d = 1 + grid[row - 1][col]
|
||||
# insertion
|
||||
i = 1 + grid[row][col - 1]
|
||||
grid[row][col] = min(s, d, i)
|
||||
print_grid(grid)
|
||||
return grid[-1][-1]
|
||||
|
||||
result = edit_distance("pizza", "pisa")
|
||||
print(result)
|
||||
assert result == 2
|
||||
print("Success!")
|
||||
Loading…
Add table
Add a link
Reference in a new issue