为什么80%的码农都做不了架构师?>>>   

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.

Example 1:

Input: s1 = "sea", s2 = "eat"
Output: 231
Explanation: Deleting "s" from "sea" adds the ASCII value of "s" (115) to the sum.
Deleting "t" from "eat" adds 116 to the sum.
At the end, both strings are equal, and 115 + 116 = 231 is the minimum sum possible to achieve this.

Example 2:

Input: s1 = "delete", s2 = "leet"
Output: 403
Explanation: Deleting "dee" from "delete" to turn the string into "let",
adds 100[d]+101[e]+101[e] to the sum.  Deleting "e" from "leet" adds 101[e] to the sum.
At the end, both strings are equal to "let", and the answer is 100+101+101+101 = 403.
If instead we turned both strings into "lee" or "eet", we would get answers of 433 or 417, which are higher.

Note:

  • 0 < s1.length, s2.length <= 1000.
  • All elements of each string will have an ASCII value in [97, 122].

解决:

①  动态规划,难点在于想出将两个字符串删除到相同的过程。

二维数组dp[i][j]代表字符串1前i个字符和字符串2前j个字符实现相同所需要删除的ASCII value;

有三种方法可以到达dp[i][j]:

  • dp[i - 1][j] + str1[i]:由于从dp[i - 1][j]到dp[i][j]是多考虑了str1的一个字符,但是str2字符数没变,所以要想相同,必须删除str1[i],考虑value的话就是加上str1[i];
  • dp[i][j - 1] + str1[j]:对应于1,这个是多考虑str2的一个字符,所以要删除str2[j]
  • dp[i - 1][j - 1] + a,这里是考虑两个str都加了一个,所以str1[i] =str2[j]时,a=0;str1[i] != str2[j]时,两个都要删除,a=str1[i] +str2[j]

这三种情况每次比较出最小的来,最后返回dp[str1.length][str2.length]

class Solution { //49ms
    public int minimumDeleteSum(String s1, String s2) {
        int m = s1.length();
        int n = s2.length();
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 1;i <= m;i ++){
            dp[i][0] = dp[i - 1][0] + s1.charAt(i - 1);
        }
        for (int i = 1;i <= n;i ++){
            dp[0][i] = dp[0][i - 1] + s2.charAt(i - 1);
        }
        for (int i = 1;i <= m;i ++){
            for (int j = 1;j <= n;j ++){
                int a = (s1.charAt(i - 1) == s2.charAt(j - 1)) ? 0 : s1.charAt(i - 1) + s2.charAt(j - 1);
                dp[i][j] = Math.min(dp[i - 1][j - 1] + a,
                        Math.min(dp[i - 1][j] + s1.charAt(i - 1),dp[i][j - 1] + s2.charAt(j - 1)));
            }
        }
        return dp[m][n];
    }
}

转载于:https://my.oschina.net/liyurong/blog/1607624

删除两个字符串中的特定字符使其相等,统计删除的字符的ASCII和相关推荐

  1. 删除字符串中的特定字符

    当要删除字符串中的特定字符时,只需要用find()和erase()两个函数搭配使用即可,find()用于找到特定字符的位置,而erase()则用于删除该位置上的字符. find(c,pos)表示从po ...

  2. 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

    题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变 ...

  3. 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”

    1.题目 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符. 例如,输入"They are students."和"aeiou",则删除之后的第一个字 ...

  4. 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入 ”They are students.” 和 ”aeiou” ,则删除之后的第一个字符串变成 ”Thy r stdnts.”

    题目 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入 "They are students." 和 "aeiou" ,则删除之后的第一个 ...

  5. 输入两个字符串,从第一个字符串中删除第二个字符串中的字符

    题目: 输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符 比如输入第一个字符串:"They are students."              第二个字符串: &q ...

  6. 输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符

    作者:小 琛 欢迎转载,请标明出处 题目: 输入两个字符串,从第一个字符串中删除第二个字符串中所有的字符 例如,输入str1为" They are students." 和str2 ...

  7. python编程—输入两个字符串,从第一字符串中删除第二个字符串中所有的字符

    题目描述: 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例 如,输入"They are students."和"aeiou", 则删除之后的第一 ...

  8. pandas删除dataframe列名称中包含特定字符串的数据列(dropping columns contains specifiec substring in dataframe)

    pandas删除dataframe列名称中包含特定字符串的数据列(dropping columns contains specifiec substring in dataframe) 目录 pand ...

  9. 找出两个字符串中所有共同的字符_面试中的两个字符串问题竟给我整懵了?!| 原力计划...

    作者 | 一路向维 责编 | 王晓曼 出品 | CSDN博客 昨天收到通知,今天有个面试,一家魔都中型电商公司,名字咱就不说了.内心顿时踌躇满志.跃跃欲试,晚上还翻看面试题,做准备. 到了目的地之后, ...

最新文章

  1. 工具04_SQL Trace/DBMS_SYSTEM
  2. 最近一直想写一个关于Installshield的连载专题
  3. python路径找类并获取静态字段
  4. 数据分层/ODS/DW/DM
  5. 实战并发编程 - 03基于不可变模式解决并发问题_1
  6. ASP.NET页面指令
  7. c语言测机器运行时间,C语言clock()测试函数运行时间
  8. 前端学习(1818):前端面试题之封装函数之进行字符串驼峰的命名
  9. Mockito—参数匹配
  10. iOS开源App整理
  11. h.264保存flv文件
  12. 深度学习综述(下载PDF版)
  13. 010 Editor 9.x.x——安装、注册和汉化
  14. tomcat配置优化,apr的配置详解
  15. 华科_图形学笔记_09_奇妙的真实感_片元着色01_01
  16. P1282 多米诺骨牌
  17. 经常听到卡农吧,可是你知道卡农背后的含义么?
  18. 产品生命周期用户生命周期?
  19. 动态规划之01背包问题
  20. 免费开放NBA赛事接口

热门文章

  1. 设计模式[3] -单例模式-代码
  2. html5 测试用例,Web 测试通用测试用例
  3. 反距离加权插值法例题_GMS插值中的反距离权重法(Inverse distance weighted)
  4. 从字母数字字符串中提取数字
  5. Oracle中的UPDATE FROM解决方法
  6. 三十岁前不要去在乎的29件事
  7. vue路由切换和用location切换url的区别
  8. 面向对象程序设计课程进度条
  9. python 代理的使用
  10. SQL分类、数据类型