583. 两个字符串的删除操作
72. 编辑距离
思路
动态规划,状态定义dp[i][j]为w1前i个字符转换成w2前j个字符所需要的步骤
代码
/*** @param {string} word1* @param {string} word2* @return {number}*/var minDistance = function(word1, word2) {let len1 = word1.length, len2 = word2.length;// 初始化数组let dp = Array(len1+1).fill(0).map(item => Array(len2 + 1).fill(0))// 初始化值, dp[i][j]表示 w1前i个字符转换成w2前j个字符所需的步骤数for(let i = 0; i <= len1; i ++) {dp[i][0] = i}for(let j = 0; j <= len2; j ++) {dp[0][j] = j}for(let i = 1; i <= len1; i ++) {for(let j = 1; j <= len2; j ++) {// 如果相等,则当前索引位置不需要变动if (word1[i-1] === word2[j-1]) {dp[i][j] = dp[i-1][j-1]} else {// 如果不相等,则进行转换操作,步骤+1dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1}}}return dp[len1][len2]};
复杂度分析
时间复杂度 #card=math&code=O%28N%5E2%29)
空间复杂度 #card=math&code=O%28N%5E2%29)
