72. 编辑距离

87 阅读1分钟

72. 编辑距离

动态规划:

  • 建模m+1n+1列 二维数组
  • 填写初始值,也就是边界情况
  • 找到arr[i][j] ,arr[i - 1][j], arr[i][j - 1], arr[i - 1][j - 1]他们的关系
  • 返回题目要求的arr[m][n]
var minDistance = function (s1, s2) {
  var m = s1.length;
  var n = s2.length;
  if (m * n == 0) return m + n;
  var arr = new Array(m + 1).fill().map(() => new Array(n + 1).fill(false));
  for (var i = 0; i < m + 1; i++) {
    arr[i][0] = i;
  }
  for (var j = 0; j < n + 1; j++) {
    arr[0][j] = j;
  }
  for (var i = 1; i < m + 1; i++) {
    for (var j = 1; j < n + 1; j++) {
      var top = arr[i - 1][j] + 1;
      var left = arr[i][j - 1] + 1;
      var left_top = arr[i - 1][j - 1];
      if (s1.charAt(i - 1) != s2.charAt(j - 1)) {
        left_top += 1;
      }
      arr[i][j] = Math.min(top, Math.min(left, left_top));
    }
  }
  return arr[m][n];
};

调试代码

console.log(minDistance("horse", "ros"));

image.png

image.png