Recurrence
int editDistance(String s, String t) {
int n = s.length(), m = t.length();
int[][] dp = new int[n + 1][m + 1];
for (int i = 0; i <= n; i++) dp[i][0] = i;
for (int j = 0; j <= m; j++) dp[0][j] = j;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (s.charAt(i-1) == t.charAt(j-1)) dp[i][j] = dp[i-1][j-1];
else dp[i][j] = 1 + Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1]));
return dp[n][m];
}Advertisement
Space O(M)
Only previous row needed. Roll arrays.
Advertisement
Faster: Hirschberg
Divide-and-conquer edit alignment in O(N·M) time, O(M) space with reconstruction.
Sub-cubic
Masek-Paterson: O(N²/log N). Rarely practical constants.