思路
题意很清晰,就是求最长公共子序列,在用两个字符串总长减去2最长
*我发现我有一个毛病!不认真审题就开始做,还容易被给的样例给带跑偏。
比如这道题,我一开始因为样例以为是 公共【连续】子序列,但其实题目中有一句话:
每步 可以删除任意一个字符串中的一个字符。
我没看,但这句话表示是不需要连续的。
var minDistance = function(word1, word2) {
// 转换题意,求最长公共子序列长度,再用总长度减去它
let dp =new Array(word1.length+1).fill(0).map(()=>new Array(word2.length+1).fill(0))
-----学一下下面这种写法,简单点
let dp = Array.from(Array(s.length + 1), () => Array(t.length +1).fill(0));
let result =0
for(let i=1;i<=word1.length;i++){
for(let j=1;j<=word2.length;j++){
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])
}
result =Math.max(result,dp[i][j])
}
}
return word1.length+word2.length -2*result
};