Delete Operation for Two Strings

MediumStringDynamic Programming

Solution

export function minDistance(word1: string, word2: string): number {
  const [n, m] = [word1.length, word2.length];
  const dp = new Array(n + 1).fill(undefined).map(() => new Array(m + 1).fill(0));
 
  let maxLength = 0;
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < m; j++) {
      if (word1[i] === word2[j]) {
        dp[i + 1][j + 1] = dp[i][j] + 1;
      } else {
        dp[i + 1][j + 1] = Math.max(dp[i + 1][j], dp[i][j + 1]);
      }
      maxLength = Math.max(maxLength, dp[i + 1][j + 1]);
    }
  }
 
  return n + m - 2 * maxLength;
}