712. 两个字符串的最小ASCII删除和

标签: 动态规划 LeetCode-712
3人阅读 评论(0) 收藏 举报
分类:

这里写图片描述
参考链接:http://www.cnblogs.com/A-Little-Nut/p/8439094.html


利用动归的思想,使用二维辅助数组 dp[i][j],其含义代表字符串 s1 的子串 s1.sub(0,i-1) 和 s2 的子串 s2.sub(0,j-1) 需删除字符的ASCII值的最小和。
(因为字符串的对于每个字符的位置是从基数 0 开始的)

根据上述说明的 dp[i][j] 的含义,其中,s1 的子串 s1.sub(0,i-1) 可以看作是 s1.sub(0,i-2)+s1(i-1) 组合而成,s2 的子串 s2.sub(0,j-1) 可以看作是 s2.sub(0,j-2)+s2(j-1) 组合而成。(s(x) 表示字符串 s 的下标为 x 的字符)。

public static int minimumDeleteSum(String s1, String s2) {
    int len1 = s1.length();
    int len2 = s2.length();
    int[][] dp = new int[len1 + 1][len2 + 1];
    dp[0][0] = 0;
    for (int j = 1; j < len2+1; j++) {
        dp[0][j] = dp[0][j - 1] + s2.charAt(j-1);
    }
    for (int i = 1; i < len1+1; i++) {
        dp[i][0] = dp[i - 1][0] + s1.charAt(i - 1);
        for (int j = 1; j < len2+1; j++) {
            if (s1.charAt(i-1)==s2.charAt(j-1)) {
                dp[i][j] = dp[i - 1][j - 1];
            } else {
                dp[i][j] = Math.min(dp[i - 1][j] + s1.charAt(i - 1), dp[i][j - 1] + s2.charAt(j - 1));
            }
        }
    }
    return dp[len1][len2];
}

对应上述算法,当 s1.charAt(i-1)!=s2.charAt(j-1)
因此 dp[i][j] 可以看作两种组合:

(1) s1.sub(0,i-2)+s1(i-1)s2.sub(0,j-1)(通俗的说,就是在 s1 的子串s1.sub(0,i-2) 与 s2 的子串 s2.sub(0,j-1)的基础上,在子串s1.sub(0,i-2) 最右边加上字符 s1(i-1) ),其中 s1.sub(0,i-2)s2.sub(0,j-1) 就对应 dp[i-1][j](代表 s1 的子串 s1.sub(0,i-2) 与 s2 的子串 s2.sub(0,j-1) 在两个字符串相等时所需删除字符的ASCII值的最小和),且此时 s1(i-1) 需要被删除,才能维持 s1.sub(0,i-1)s2.sub(0,j-1) 在原删除了字符的基础上继续相等;

(2) s1.sub(0,i-1)s2.sub(0,j-2)+s2(j-1),其中 s1.sub(0,i-1)s2.sub(0,j-2) 就对应 dp[i][j-1],此时 s2(j-1) 需要被删除。

并且需要动态的比较是删除 s1(i-1) 还是删除 s2(j-1) 带来的代价小一点。

查看评论

Leetcode712. 计算两个字符串删除任意字符后使二者相等的最小删除字符和

编辑距离
  • obrcnh
  • obrcnh
  • 2017-10-28 20:05:53
  • 189

leetcode 712. Minimum ASCII Delete Sum for Two Strings 动态规划DP的典型变形题

Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal....
  • JackZhang_123
  • JackZhang_123
  • 2017-12-24 10:23:03
  • 145

712. Minimum ASCII Delete Sum for Two Strings

Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal....
  • zjucor
  • zjucor
  • 2017-10-23 10:16:34
  • 432

712. Minimum ASCII Delete Sum for Two Strings(动态规划)

最长子序列问题。
  • w_bu_neng_ku
  • w_bu_neng_ku
  • 2017-11-01 20:56:38
  • 412

Leetcode712. Minimum ASCII Delete Sum for Two Strings

Leetcode712. Minimum ASCII Delete Sum for Two Strings 题目: Given two strings s1, s2, find the l...
  • mohuak
  • mohuak
  • 2017-11-02 17:43:14
  • 168

[leetcode] 712. Minimum ASCII Delete Sum for Two Strings

712. Minimum ASCII Delete Sum for Two Strings
  • yaozhili_
  • yaozhili_
  • 2017-10-28 22:16:51
  • 281

Dynamic Programing -- Leetcode problem 712. Minimum ASCII Delete Sum for Two Strings

描述:Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equ...
  • m0_38088298
  • m0_38088298
  • 2017-12-12 16:24:26
  • 51

leetcode 712 Minimum ASCII Delete Sum for Two Strings

Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal....
  • hello_my_coder
  • hello_my_coder
  • 2017-12-07 13:09:48
  • 58

华为校招第三题:字符串变换最小费用(动态规划DP问题)

题目: 给出两个字串A,B。将A字串转化为B字串,转化一共有两种方式:删除连续的n个字符,一次操作费用为2。增加连续的n个字符(增加的字符是什么由你决定),一次操作费用为n+2。求把A变为B最小费用...
  • wuxizhi777
  • wuxizhi777
  • 2016-09-04 15:21:09
  • 2907

51nod oj 1183 编辑距离 【求一个字符串到另一个字符串的最小操作次数【类似LCS】】

题目链接:1183 此题相当于LCS---下面的看不懂了可以看LCA   他们的原理是像似的- 设S串和T串-- 我们可以从后面开始看-.- //如果s[n]==t[m]-...
  • leibniz_zhang
  • leibniz_zhang
  • 2016-08-08 17:18:03
  • 523
    个人资料
    持之以恒
    等级:
    访问量: 427
    积分: 209
    排名: 30万+
    文章存档