编辑距离也可以压缩空间复杂度

90 阅读1分钟

image.png

/**
 * @param {string} word1
 * @param {string} word2
 * @return {number}
 */
var minDistance = function (word1, word2) {
    if(word1==''||word2=='') return Math.max(word1.length,word2.length)
    let dp=new Array(word1.length+1).fill().map((_,i)=>i)
    for(let i=1;i<=word2.length;i++){
        let pre=i-1
        dp[0]=i
        for(let j=1;j<=word1.length;j++){
            let temp=dp[j]
            dp[j]=word1[j-1]==word2[i-1]?pre:Math.min(pre,dp[j-1],dp[j])+1
            pre=temp
        }
    }
    return dp[word1.length]
};

注意每次循环之前需要对let pre=i-1 dp[0]=i手动赋值。