summaryrefslogtreecommitdiff
path: root/AlgoDesignAndTechniqueEdxPython/sources/edit_distance.py
diff options
context:
space:
mode:
authorHaidong Ji2018-12-22 15:11:02 -0600
committerHaidong Ji2018-12-22 15:11:02 -0600
commit33b21ee9aad03b052d14227e023b9697c6ce4a55 (patch)
tree8467cf09439a2e0ec7eae7425fb34a9f8bfaf89e /AlgoDesignAndTechniqueEdxPython/sources/edit_distance.py
parentc023f45e82a5631319563be730f5e7aea9eee861 (diff)
Edit distance done!
It turned out my Java test cases didn't cover enough number of cases. I added one test case for it to fail, and figured out that the range in 2 loops should start with 1.
Diffstat (limited to 'AlgoDesignAndTechniqueEdxPython/sources/edit_distance.py')
-rw-r--r--AlgoDesignAndTechniqueEdxPython/sources/edit_distance.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/AlgoDesignAndTechniqueEdxPython/sources/edit_distance.py b/AlgoDesignAndTechniqueEdxPython/sources/edit_distance.py
new file mode 100644
index 0000000..de6c8dc
--- /dev/null
+++ b/AlgoDesignAndTechniqueEdxPython/sources/edit_distance.py
@@ -0,0 +1,30 @@
+# Uses python3
+def editDistance(A, B):
+ m = len(B)
+ n = len(A)
+# Matrix = [[0 for x in range(w)] for y in range(h)]
+# https://stackoverflow.com/questions/6667201/how-to-define-a-two-dimensional-array-in-python
+ D = [[0 for _ in range(m + 1)] for _ in range(n + 1)]
+
+ for i in range(n + 1):
+ D[i][0] = i
+
+ for j in range(m + 1):
+ D[0][j] = j
+
+ # watch out here, range starts at 1!
+ for j in range(1, m + 1):
+ for i in range(1, n + 1):
+ insertion = D[i][j - 1] + 1
+ deletion = D[i - 1][j] + 1
+ match = D[i - 1][j - 1]
+ mismatch = D[i - 1][j - 1] + 1
+ if A[i - 1] == B[j - 1]:
+ D[i][j] = min(insertion, deletion, match)
+ else:
+ D[i][j] = min(insertion, deletion, mismatch)
+ return D[n][m]
+
+
+if __name__ == "__main__":
+ print(editDistance(input(), input()))