Levenshtein Distance

  • n x m, n x m

function levenshteinDistance(str1, str2) {
  const edits = new Array(str1.length + 1);
  edits[0] = new Array(str2.length + 1).fill(1).map((v, idx) => idx)
  for (let i = 1; i < str1.length + 1; i++ ) {
    edits[i] = new Array(str2.length + 1).fill(0);
    edits[i][0] = i;
  }

  for (let i = 1; i < str1.length + 1; i++) {
    for (let j = 1; j < str2.length + 1; j++) {
      const c1 = str1[i - 1];
      const c2 = str2[j - 1];

      if (c1 === c2) {
        edits[i][j] = edits[i - 1][j - 1];
        continue;
      }

      edits[i][j] = Math.min(edits[i - 1][j], edits[i][j - 1], edits[i - 1][j - 1]) + 1;
    }
  }
  console.log(edits)

  return edits[str1.length][str2.length];
}

// Do not edit the line below.
exports.levenshteinDistance = levenshteinDistance;
  • n x m, min(m, n)

Last updated