LeetCode:Minimum ASCII Delete Sum for Two Strings

题目链接:https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/description/

题目介绍:给出2个字符串,找出删除掉ASCII码值和最小的字符使得2个字符串相同。

解题思路:设需要编辑的2个字符串为s1[1...m]和s2[1...n],用S(i,j)表示s1[1...i]和s2[1...j]的删除字符的最小ASCII码值之和。

S(0,0)=0;

当i=0时,S(i,j)=s2[j]+S(i,j-1);

当j=0时,S(i,j)=s1[i]+S(i-1,j);

当i>0且j>0时,S(i,j)=min{s1[i]+S(i-1,j), s2[j]+S(i,j-1), cost(i,j)+S(i-1,j-1)}

其中,当s1[i]=s2[j]时,cost(i,j)=0;否则cost(i,j)=s1[i]+s2[j]。

代码如下:

class Solution {
public:
    int minimumDeleteSum(string s1, string s2) {
    int size1 = s1.size(), size2 = s2.size();
    if (size1 == 0 && size2 == 0) {
        return 0;
    }
    else if (size1 == 0) {
        int sum = 0;
        for (int i = 0; i < size2; i++) {
            sum += s2[i];
        }
        return sum;
    }
    else if (size2 == 0) {
        int sum = 0;
        for (int i = 0; i < size1; i++) {
            sum += s1[i];
        }
        return sum;
    }
    else {
        int** S = new int*[size1+1];
        for (int i = 0; i < size1+1; i++) {
            S[i] = new int[size2+1];
        }
        S[0][0] = 0;
        for (int i = 1; i < size1 + 1; i++) {
            S[i][0] = S[i-1][0] + s1[i-1];
        }
        for (int i = 1; i < size2 + 1; i++) {
            S[0][i] = S[0][i-1] + s2[i-1];
        }
        for (int i = 1; i < size1 + 1; i++) {
            for (int j = 1; j < size2 + 1; j++) {
                int d1 = s1[i-1] + S[i - 1][j];
                int d2 = s2[j-1] + S[i][j - 1];
                int d0 = S[i - 1][j - 1];
                if (s1[i-1] != s2[j-1]) d0 += s1[i-1] + s2[j-1];
                S[i][j] = min(d0, d1, d2);
            }
        }
        return S[size1][size2];
    }
}
int min(int a, int b, int c) {
    int min = (a < b) ? a : b;
    return (min < c) ? min : c;
}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值