法1:动态规划
想法:
- 假设 word1 和 word2 的最长公共子序列长度为 L
- 最小步数 = word1.length - L + word2.length - L
/**
* @param {string} word1
* @param {string} word2
* @return {number}
*/
var minDistance = function(word1, word2) {
var l1 = word1.length, l2 = word2.length, dp = [], i = 0, j = 0;
for(i = 0; i <= l1; i++) { // l1 + 1行,l2 + 1列
dp[i] = [];
}
for(i = 0; i <= l1; i++) {
for(j = 0; j <= l2; j++) {
if(i == 0 || j == 0) {
dp[i][j] = 0;
continue;
}
if(word1[i - 1] == word2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return l1 - dp[l1][l2] + l2 - dp[l1][l2];
};