LC072 - Edit Distance

Problem

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

Input: word1 = "horse", word2 = "ros"

Output: 3

Explanation:

  • horse -> rorse (replace 'h' with 'r')

  • rorse -> rose (remove 'r')

  • rose -> ros (remove 'e')

Solution

2D Dynamic Programming

This question came up before in my Speech and Language Processing course, and the taught method was a 2D DP approach, so we will go straight to it.

def minDistance(self, word1: str, word2: str) -> int:
	arr = [[float("inf") for _ in range(len(word2) + 1)] for _ in range(len(word1) + 1)]

	for j in range(len(word2) + 1):
		arr[len(word1)][j] = len(word2) - j
	for i in range(len(word1) + 1):
		arr[i][len(word2)] = len(word1) - i 

	# for length of words:
	for i in range(len(word1)-1, -1, -1):
		for j in range(len(word2)-1, -1, -1):
			if word1[i] == word2[j]:
				arr[i][j] = arr[i+1][j+1]
			else:
				arr[i][j] = 1 + min(arr[i+1][j], arr[i][j+1], arr[i+1][j+1])
				
	return arr[0][0]

Last updated