Skip to content

72. Edit Distance

Difficulty Topics

Description

Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2.

You have the following three operations permitted on a word:

  • Insert a character
  • Delete a character
  • Replace a character

 

Example 1:

Input: word1 = "horse", word2 = "ros"
Output: 3
Explanation: 
horse -> rorse (replace 'h' with 'r')
rorse -> rose (remove 'r')
rose -> ros (remove 'e')

Example 2:

Input: word1 = "intention", word2 = "execution"
Output: 5
Explanation: 
intention -> inention (remove 't')
inention -> enention (replace 'i' with 'e')
enention -> exention (replace 'n' with 'x')
exention -> exection (replace 'n' with 'c')
exection -> execution (insert 'u')

 

Constraints:

  • 0 <= word1.length, word2.length <= 500
  • word1 and word2 consist of lowercase English letters.

Solution

edit-distance.py
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        n1, n2 = len(word1), len(word2)

        @cache
        def go(i, j):
            if i == n1 and j == n2: return 0
            elif i == n1: return n2 - j
            elif j == n2: return n1 - i

            if word1[i] == word2[j]:
                return go(i + 1, j + 1)
            else:
                return 1 + min(go(i + 1, j + 1), go(i + 1, j), go(i, j + 1))

        return go(0, 0)