DPDynamic Programming

Edit Distance (Levenshtein)

Minimum number of insertions, deletions, and substitutions to turn one string into another via a 2D prefix table.

Learn Edit Distance →
sitting
01234567
k1·······
i2·······
t3·······
t4·······
e5·······
n6·······
1/44Turning a prefix into the empty string costs one deletion per character (column 0); building it from empty costs one insertion per character (row 0).
Cell being filledDependency readBase caseComputedReconstructed choice
1dp[i][0] = i; dp[0][j] = j
2for i in 1 .. m: for j in 1 .. n:
3 if A[i] == B[j]: dp[i][j] = dp[i-1][j-1]
4 else: dp[i][j] = 1 + min(dp[i-1][j-1] replace, dp[i-1][j] delete, dp[i][j-1] insert)
5traceback from dp[m][n]
Variables
m6
n7
Complexity
best O(n·m)
avg O(n·m)
worst O(n·m)
space O(min(n, m))
Speed