Edit Distance

MediumStringDynamic Programming

Solution

import { range } from '@algorithm/lib';
 
export function minDistance(word1: string, word2: string): number {
  const [m, n] = [word1.length, word2.length];
  const dp: number[][] = Array.from({ length: m + 1 }).map(() => new Array(n + 1).fill(0));
  for (const i of range(m + 1)) {
    dp[i][0] = i;
  }
  for (const j of range(n + 1)) {
    dp[0][j] = j;
  }
 
  for (const i of range(1, m + 1)) {
    for (const j of range(1, n + 1)) {
      if (word1[i - 1] === word2[j - 1]) {
        dp[i][j] = dp[i - 1][j - 1];
      } else {
        dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
      }
    }
  }
  return dp[m][n];
}