@@ -30,26 +30,23 @@ def damerau_levenshtein_distance(first_string: str, second_string: str) -> int:
30
30
2
31
31
>>> damerau_levenshtein_distance("container", "containment")
32
32
3
33
+ >>> damerau_levenshtein_distance("container", "containment")
34
+ 3
33
35
"""
34
-
35
- length_of_first_string = len (first_string )
36
- length_of_second_string = len (second_string )
37
-
38
36
# Create a dynamic programming matrix to store the distances
39
- dp_matrix = [
40
- [0 ] * (length_of_second_string + 1 ) for _ in range (length_of_first_string + 1 )
41
- ]
37
+ dp_matrix = [[0 ] * (len (second_string ) + 1 ) for _ in range (len (first_string ) + 1 )]
42
38
43
39
# Initialize the matrix
44
- for i in range (length_of_first_string + 1 ):
40
+ for i in range (len ( first_string ) + 1 ):
45
41
dp_matrix [i ][0 ] = i
46
- for j in range (length_of_second_string + 1 ):
42
+ for j in range (len ( second_string ) + 1 ):
47
43
dp_matrix [0 ][j ] = j
48
44
49
45
# Fill the matrix
50
- for i in range (1 , length_of_first_string + 1 ):
51
- for j in range (1 , length_of_second_string + 1 ):
52
- cost = 0 if first_string [i - 1 ] == second_string [j - 1 ] else 1
46
+ # for i in range(1, length_of_first_string + 1):
47
+ for i , first_char in enumerate (first_string , start = 1 ):
48
+ for j , second_char in enumerate (second_string , start = 1 ):
49
+ cost = int (first_char != second_char )
53
50
54
51
dp_matrix [i ][j ] = min (
55
52
dp_matrix [i - 1 ][j ] + 1 , # Deletion
@@ -63,11 +60,10 @@ def damerau_levenshtein_distance(first_string: str, second_string: str) -> int:
63
60
and first_string [i - 1 ] == second_string [j - 2 ]
64
61
and first_string [i - 2 ] == second_string [j - 1 ]
65
62
):
66
- dp_matrix [i ][j ] = min (
67
- dp_matrix [i ][j ], dp_matrix [i - 2 ][j - 2 ] + cost
68
- ) # Transposition
63
+ # Transposition
64
+ dp_matrix [i ][j ] = min (dp_matrix [i ][j ], dp_matrix [i - 2 ][j - 2 ] + cost )
69
65
70
- return dp_matrix [length_of_first_string ][ length_of_second_string ]
66
+ return dp_matrix [- 1 ][ - 1 ]
71
67
72
68
73
69
if __name__ == "__main__" :
0 commit comments