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

相关题目:最长公共子序列

1、递归(超时)

先求出最长公共子序列的长度后,回溯dp数组,找出所有回溯路径中值最大的即可。

int minimumDeleteSum(string s1, string s2) {int len1=s1.size();int len2=s2.size();int sum=0;for(char ch:s1){sum+=(int)ch;}for(char ch:s2){sum+=(int)ch;}vector<vector<int>> dp(len1+1,vector<int>(len2+1,0));for(int i=1;i<=len1;i++){for(int j=1;j<=len2;j++){if(s1[i-1]==s2[j-1]){dp[i][j]=dp[i-1][j-1]+1;}else{dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}}return sum-2*backTrack(s1,s2,dp,len1,len2);
}
int backTrack(string &s1,string &s2,vector<vector<int>> &dp,int i,int j){if(i<=0||j<=0){return 0;} int sum1=INT_MIN,sum2=INT_MIN;if(s1[i-1]==s2[j-1]){sum1=(int)s1[i-1];sum2=(int)s2[j-1];return max(sum1,sum2)+backTrack(s1,s2,dp,i-1,j-1);}else{if(dp[i][j]==dp[i-1][j]){sum1=backTrack(s1,s2,dp,i-1,j);}if(dp[i][j]==dp[i][j-1]){sum2=backTrack(s1,s2,dp,i,j-1);}}return max(sum1,sum2);
}

2、动态规划

动态规划不太容易想到

dp[i][j]表示s1[:i]和s2[:j]满足条件需要删除的最小和

状态转移

 dp[i][j]=dp[i-1][j-1];                               当s1[i]==s2[j]时,dp[i][j]不用减dp[i][j]=min(s1[i-1]+dp[i-1][j],s2[j-1]+dp[i][j-1]); 当s1[i]!=s2[j]时,dp[i][j]至少要删除s1[i]和s2[j]其中的一个

dp[len1][len2]就是最终解。

int minimumDeleteSum(string s1, string s2) {int len1=s1.size();int len2=s2.size();vector<vector<int>> dp(len1+1,vector<int>(len2+1,0));for(int i=1;i<=len1;i++){dp[i][0]=dp[i-1][0]+s1[i-1];}for(int i=1;i<=len2;i++){dp[0][i]=dp[0][i-1]+s2[i-1];}for(int i=1;i<=len1;i++){for(int j=1;j<=len2;j++){if(s1[i-1]==s2[j-1]){dp[i][j]=dp[i-1][j-1];}else{dp[i][j]=min(s1[i-1]+dp[i-1][j],s2[j-1]+dp[i][j-1]);}}}return dp[len1][len2];
}

示例,s1=“sea”,s2=“eat”,状态转移如下:

leetcode算法题--两个字符串的最小ASCII删除和★相关推荐

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

    712. 两个字符串的最小ASCII删除和 -------------------------------------------- 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的AS ...

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

    LeetCode 712. 两个字符串的最小ASCII删除和 文章目录 LeetCode 712. 两个字符串的最小ASCII删除和 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂 ...

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

    Time: 20190906 Type: Medium 题目描述 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea ...

  4. LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)

    1. 题目 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...

  5. leetcode 712. Minimum ASCII Delete Sum for Two Strings | 712. 两个字符串的最小ASCII删除和(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 题解 经典的 暴力递归 -> 傻缓存 -&g ...

  6. leetcode712. 两个字符串的最小ASCII删除和(动态规划)-Gogo

    给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" 输出: ...

  7. 算法61---两个字符串的最小ASCII删除和【动态规划】

    一.题目: 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...

  8. 云合智网 面试算法题 两个字符串相乘,例如“12345“ * “54321“,字符串不能直接转换为整型

    题目 两个字符串相乘,例如"12345" * "54321",字符串不能直接转换为整型 public class StringMultiplication {p ...

  9. leetcode算法题--使序列递增的最小交换次数★

    原题链接:https://leetcode-cn.com/problems/minimum-swaps-to-make-sequences-increasing/ 动态规划 dp[0]表示若当前位置不 ...

最新文章

  1. 【开发环境】安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio Code )
  2. 开课吧 Python专家级编程:机制与实操
  3. SQL:将查询结果插入到另一个表的三种情况
  4. 29 SD配置-主数据-信用管理-分配订单类型的信贷控制
  5. PCL点云学习(1)——pcd文件的生成和读取
  6. 寻找数组中 的最大值最小值
  7. 如何在 AirPods Pro 上安装 Apple 的 Beta 版固件?
  8. isis仿真软件怎么导入C语言,Proteus导入程序的操作方法
  9. dcdc转换器计算机显示,DC-DC转换器的问题
  10. UVa 10361 自动作诗机
  11. android 辅助功能(无障碍) AccessibilityService 实战入门详解
  12. java技能要求_Java工程师需要具备的25个技能
  13. 对ABAP程序调优的学习(三)并行并发读取
  14. 【软件篇】~ 为什么打开谷歌浏览器就是360导航页面呢?
  15. 今年春季清华大学雨课堂主讲嘉宾邹晓辉讲授了融智学系列公益课:
  16. 怎么减少if()---else操作,优化代码
  17. Basler|基于OpenCV的Basler相机采集图像程序
  18. wifi卡慢延迟高_WiFi明明信号满格,为何又卡又慢,问题在这里!
  19. qqwry.dat的数据结构解释
  20. windows 安装汽车之家falcon插件 采集数据

热门文章

  1. python难嘛-我没有基础,能否学会Python?Python难吗?
  2. python学精通要多久-学习Python零基础需要学多久?
  3. python学习手册条件-总算晓得python学习手册正式版
  4. python可以干什么-Python可以用来做什么 为你揭开python神秘面纱
  5. python csv读取-使用python获取csv文本的某行或某列数据的实例
  6. python大神-Python代码怎么写,听听顶尖Python大神的建议
  7. 如何检查电脑是否安装了python-python-如何检查安装了scikit的nltk版本?
  8. python课程与c+课程有什么不同-南通渡课少儿编程:python和C的区别是什么?
  9. 零基础学python全彩版实战答案-零基础学Python(全彩版)
  10. python timer使用-python下timer定时器常用的两种实现方法