一、题目:

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

示例 1:

输入: s1 = "sea", s2 = "eat"
输出: 231
解释: 在 "sea" 中删除 "s" 并将 "s" 的值(115)加入总和。
在 "eat" 中删除 "t" 并将 116 加入总和。
结束时,两个字符串相等,115 + 116 = 231 就是符合条件的最小和。

示例 2:

输入: s1 = "delete", s2 = "leet"
输出: 403
解释: 在 "delete" 中删除 "dee" 字符串变成 "let",
将 100[d]+101[e]+101[e] 加入总和。在 "leet" 中删除 "e" 将 101[e] 加入总和。
结束时,两个字符串都等于 "let",结果即为 100+101+101+101 = 403 。
如果改为将两个字符串转换为 "lee" 或 "eet",我们会得到 433 或 417 的结果,比答案更大。

注意:

  • 0 < s1.length, s2.length <= 1000
  • 所有字符串中的字符ASCII值在[97, 122]之间。

思路:动态规划:时间O(M*N),空间O(M*N)

dp[i][j]表示s1字符串第i个到s2字符串di第j个相等所需的代价。

子问题:dp[i][j-1]、dp[i-1][j]、dp[i-1][j-1]

状态方程:如果s1[i] == s2[j]:dp[i][j] = dp[i-1][j-1]

否则:dp]i][j] =  dp[i][j] = min(dp[i][j-1] +ord(s2[j-1]),dp[i-1][j] + ord(s1[i-1]),dp[i-1][j-1] + ord(s1[i-1])+ord(s2[j-1]))

代码:

    def minimumDeleteSum(self, s1, s2):""":type s1: str:type s2: str:rtype: int"""if not s1 and not s2:return  0if not s1 and s2:return sum([ord(ss) for ss in s2])if not s2 and s1:return sum([ord(ss) for ss in s1])m , n = len(s1) , len(s2)dp = [[0] * (n+1) for i in range(m+1)]dp[0][0] = 0for i in range(1,m+1):dp[i][0] = dp[i-1][0] + ord(s1[i-1])for j in range(1,n+1):dp[0][j] = dp[0][j-1] + ord(s2[j-1])for i in range(1,m+1):for j in range(1,n+1):if s1[i-1] == s2[j-1]:dp[i][j] = dp[i-1][j-1]else:dp[i][j] = min(dp[i][j-1] +ord(s2[j-1]),dp[i-1][j] + ord(s1[i-1]),dp[i-1][j-1] + ord(s1[i-1])+ord(s2[j-1]))return dp[-1][-1]

转载于:https://www.cnblogs.com/Lee-yl/p/9986989.html

算法61---两个字符串的最小ASCII删除和【动态规划】相关推荐

  1. leetcode算法题--两个字符串的最小ASCII删除和★

    原题链接:https://leetcode-cn.com/problems/minimum-ascii-delete-sum-for-two-strings/ 相关题目:最长公共子序列 1.递归(超时 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. 【每日一算法】两个列表的最小索引总和

    微信改版,加星标不迷路! 每日一算法-两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的 ...

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

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

最新文章

  1. PHP中Session的使用
  2. 计算机搞定44年几何难题,原来这2个人25年前猜对了
  3. LeetCode - Medium - Validate IP Addres
  4. centos7 nginx php整合,Centos7下,宿主机nginx配合docker环境的php-fpm
  5. java垂直拆分,MyCat分片:垂直拆分实例解析和代码实现
  6. “3D几何与视觉技术”全球在线研讨会第四期~几何深度学习
  7. 扫描仪scanner接口_QR Code Scanner –适用于Android的条形码扫描仪
  8. java 读文件 解析
  9. RapidMiner 数据转换
  10. C语言xio习笔记1递归函数实例
  11. Blender 3.2 强势更新!附下载地址和更新内容
  12. 计算机公式求时间差公式,24时间差计算公式 excel中计算24小时
  13. 通用Excel数据导入功能模板
  14. Python习题册_from_big brother
  15. android如何实现qq登陆和qq分享,2021超详细mob平台图解教程?
  16. Java数据结构—堆(Heap)
  17. 【北亚数据恢复】Hp DL380服务器raid磁盘故障导致数据库数据丢失的数据恢复案例
  18. [转]十年一覺程設夢[完整版]
  19. ElasticSearch 集群安装,简单使用
  20. 神经网络算法---手写数字体识别

热门文章

  1. 前端 js 非控件 使用标签打印机 打印二维码和文本_青岛Web前端(HTML5)面试题分享...
  2. oracle 触发器 merge,[OT]函数|过程|触发器|插入(insert)|修改(Merge)
  3. String类能被继承吗,为什么?
  4. linus下centos7防火墙设置
  5. SQLServer知识:sqlcmd用法笔记
  6. 操作系统:电脑的回收站的秘密你知道吗?
  7. Windows系统优化12个默认设置
  8. linux kafka离线安装,centos 离线安装confluent_kafka 模块
  9. linux vim基本操作,vim基本操作笔记
  10. 原神服务器维护后抽奖池会更新吗,原神:武器池改动,玩家的诉求再次得到反馈!PS端将与官服互通!...