712. Minimum ASCII Delete Sum for Two Strings 串相等的最小删除代价

712. Minimum ASCII Delete Sum for Two Strings 串相等的最小删除代价

dp[i][j] 代表 串A的i-1位字符,串B的j-1位字符,对于每一个 i-1 来说,j-1都有删和不删的选择,如果这两个字符相等,那么选择不删,dp[i][j]=dp[i-1][j-1],否则需要删除其中一个,取最小的赋给 dp[i][j]

int minimumDeleteSum(string& s1, string& s2) {
    int m=s1.size();
    int n=s2.size();
    vector<vector<int> > dp(m+1, vector<int>(n+1, 0));
    for(int i=0;i<n;++i)
        dp[0][i+1]=s2[i]+dp[0][i];

    for(int i=1;i<=m;++i) {
        dp[i][0]=s1[i-1]+dp[i-1][0];
        for(int j=1;j<=n;++j) {
            if (s1[i-1]==s2[j-1])
                dp[i][j]=dp[i-1][j-1];
            else
                dp[i][j]=min(dp[i-1][j]+s1[i-1], dp[i][j-1]+s2[j-1]);
        }
    }
    return dp[m][n];
}

#DP