115.不同的子序列
解题思路
代码实现
var numDistinct = function(s, t) {
var dp = new Array(s.length+1).fill().map(()=>new Array(t.length+1).fill(0));
for(let i=0;i<=s.length;i++){
dp[i][0] = 1;
}
for(let i=1;i<=s.length;i++){
for(let j=1;j<=t.length;j++){
if(s[i-1]===t[j-1]){
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}else{
dp[i][j] = dp[i-1][j];
}
}
}
return dp[s.length][t.length]
};
583. 两个字符串的删除操作
解题思路
代码实现
var minDistance = function(word1, word2) {
var dp = new Array(word1.length+1).fill().map(()=>new Array(word2.length+1));
for(let i=0;i<=word1.length;i++){
dp[i][0]=i;
}
for(let j=0;j<=word2.length;j++){
dp[0][j] = j;
}
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];
}else{
dp[i][j] = Math.min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+2);
}
}
}
return dp[word1.length][word2.length];
};
72. 编辑距离
解题思路
代码实现
var minDistance = function(word1, word2) {
var dp = new Array(word1.length+1).fill().map(()=>new Array(word2.length+1).fill(0));
for(let i=0;i<=word1.length;i++){
dp[i][0] =i;
}
for(let j=0;j<=word2.length;j++){
dp[0][j] =j;
}
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];
}else{
dp[i][j] = Math.min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1);
}
}
}
return dp[word1.length][word2.length];
};