diff --git a/Algorithms_and_Data_Structures/Dynamic-Programming-Series/Hard-DP-Problems/levenshtein-distance.py b/Algorithms_and_Data_Structures/Dynamic-Programming-Series/Hard-DP-Problems/levenshtein-distance.py new file mode 100644 index 0000000000..ad2350774a --- /dev/null +++ b/Algorithms_and_Data_Structures/Dynamic-Programming-Series/Hard-DP-Problems/levenshtein-distance.py @@ -0,0 +1,27 @@ +def minDistance(word1, word2): + m, n = len(word1), len(word2) + + # Initialize a (m+1) x (n+1) dp table + dp = [[0] * (n + 1) for _ in range(m + 1)] + + for i in range(m + 1): + dp[i][0] = i + for j in range(n + 1): + dp[0][j] = j + + for i in range(1, m + 1): + for j in range(1, n + 1): + if word1[i - 1] == word2[j - 1]: + dp[i][j] = dp[i - 1][j - 1] + else: + dp[i][j] = min( + dp[i - 1][j] + 1, + dp[i][j - 1] + 1, + dp[i - 1][j - 1] + 1 + ) + + return dp[m][n] + +word1 = "horse" +word2 = "ros" +print(f"Minimum edit distance to convert '{word1}' to '{word2}': {minDistance(word1, word2)}")