动态规划——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:

Tips:

posted @ 2021-05-03 21:25  Originhhh  阅读(112)  评论(0)    收藏  举报