1
+ # The Levenshtein distance (Edit distance) Problem
2
+
3
+ # Informally, the Levenshtein distance between two words is
4
+ # the minimum number of single-character edits (insertions, deletions or substitutions)
5
+ # required to change one word into the other.
6
+
7
+ # For example, the Levenshtein distance between kitten and sitting is 3.
8
+ # The minimal edit script that transforms the former into the latter is:
9
+
10
+ # kitten —> sitten (substitution of s for k)
11
+ # sitten —> sittin (substitution of i for e)
12
+ # sittin —> sitting (insertion of g at the end)
13
+
14
+ def levenshtein_distance (word_1 , chars_1 , word_2 , chars_2 ):
15
+ # base case if the strings are empty
16
+ if chars_1 == 0 :
17
+ return chars_2
18
+ if chars_2 == 0 :
19
+ return chars_1
20
+
21
+ # if last characters of the string match, the cost of
22
+ # operations is 0, i.e. no changes are made
23
+ if word_1 [chars_1 - 1 ] == word_2 [chars_2 - 1 ]:
24
+ cost = 0
25
+ else :
26
+ cost = 1
27
+
28
+ # calculating the numbers of operations recursively
29
+ deletion = levenshtein_distance (word_1 , chars_1 - 1 , word_2 , chars_2 ) + 1
30
+ insertion = levenshtein_distance (word_1 , chars_1 , word_2 , chars_2 - 1 ) + 1
31
+ substitution = levenshtein_distance (word_1 , chars_1 - 1 , word_2 , chars_2 - 1 ) + cost
32
+
33
+ return min (deletion , insertion , substitution )
34
+
35
+ # driving script
36
+ if __name__ == '__main__' :
37
+ word_1 = input ("Enter Word 1 :" )
38
+ word_2 = input ("Enter Word 2 :" )
39
+
40
+ print ('The Levenshtein distance is:' )
41
+ print (levenshtein_distance (word_1 , len (word_1 ), word_2 , len (word_2 )))
0 commit comments