动态规划——712. 两个字符串的最小ASCII删除和
动态规划——712. 两个字符串的最小ASCII删除和
题目:

思路:
这题还是装换为最长公共子序列问题,然后的这题特殊的是ascii码值.
所以我们的dp数组定义变为:dp[i] [j]代表 str1[0 , ... , i] 和 str2[0 , ... , j] 最长公共子序列的ascii码值的总和,剩下的和最长公共子序列一样。
代码:
class Solution {
public:
int minimumDeleteSum(string s1, string s2) {
int m = s1.size()+1, n= s2.size()+1;
int dp[m][n];
for(int i =0;i<m;i++){
dp[i][0] = 0;
}
for(int j = 0; j < n; j++){
dp[0][j] = 0;
}
for(int i = 1;i<m;i++){
for(int j=1;j<n;j++){
if(s1[i-1] == s2[j-1]){
dp[i][j] = dp[i-1][j-1] + s1[i-1];
}else{
dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
}
}
int sum=0;
for(int i=0;i<m;i++) sum+=s1[i];
for(int i=0;i<n;i++) sum+=s2[i];
return sum - 2*dp[m-1][n-1];
}
};
Rank:


浙公网安备 33010602011771号