算法61---两个字符串的最小ASCII删除和【动态规划】
一、题目:
给定两个字符串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删除和【动态规划】相关推荐
- leetcode算法题--两个字符串的最小ASCII删除和★
原题链接:https://leetcode-cn.com/problems/minimum-ascii-delete-sum-for-two-strings/ 相关题目:最长公共子序列 1.递归(超时 ...
- leetcode - 712. 两个字符串的最小ASCII删除和
712. 两个字符串的最小ASCII删除和 -------------------------------------------- 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的AS ...
- LeetCode 712. 两个字符串的最小ASCII删除和
LeetCode 712. 两个字符串的最小ASCII删除和 文章目录 LeetCode 712. 两个字符串的最小ASCII删除和 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂 ...
- leetcode712. 两个字符串的最小ASCII删除和(动态规划)-Gogo
给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" 输出: ...
- LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)
1. 题目 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...
- Leetcode 712.两个字符串的最小ASCII删除和
Time: 20190906 Type: Medium 题目描述 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea ...
- leetcode 712. Minimum ASCII Delete Sum for Two Strings | 712. 两个字符串的最小ASCII删除和(暴力递归->傻缓存->DP)
题目 https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 题解 经典的 暴力递归 -> 傻缓存 -&g ...
- 【每日一算法】两个列表的最小索引总和
微信改版,加星标不迷路! 每日一算法-两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的 ...
- 云合智网 面试算法题 两个字符串相乘,例如“12345“ * “54321“,字符串不能直接转换为整型
题目 两个字符串相乘,例如"12345" * "54321",字符串不能直接转换为整型 public class StringMultiplication {p ...
最新文章
- PHP中Session的使用
- 计算机搞定44年几何难题,原来这2个人25年前猜对了
- LeetCode - Medium - Validate IP Addres
- centos7 nginx php整合,Centos7下,宿主机nginx配合docker环境的php-fpm
- java垂直拆分,MyCat分片:垂直拆分实例解析和代码实现
- “3D几何与视觉技术”全球在线研讨会第四期~几何深度学习
- 扫描仪scanner接口_QR Code Scanner –适用于Android的条形码扫描仪
- java 读文件 解析
- RapidMiner 数据转换
- C语言xio习笔记1递归函数实例
- Blender 3.2 强势更新!附下载地址和更新内容
- 计算机公式求时间差公式,24时间差计算公式 excel中计算24小时
- 通用Excel数据导入功能模板
- Python习题册_from_big brother
- android如何实现qq登陆和qq分享,2021超详细mob平台图解教程?
- Java数据结构—堆(Heap)
- 【北亚数据恢复】Hp DL380服务器raid磁盘故障导致数据库数据丢失的数据恢复案例
- [转]十年一覺程設夢[完整版]
- ElasticSearch 集群安装,简单使用
- 神经网络算法---手写数字体识别
热门文章
- 前端 js 非控件 使用标签打印机 打印二维码和文本_青岛Web前端(HTML5)面试题分享...
- oracle 触发器 merge,[OT]函数|过程|触发器|插入(insert)|修改(Merge)
- String类能被继承吗,为什么?
- linus下centos7防火墙设置
- SQLServer知识:sqlcmd用法笔记
- 操作系统:电脑的回收站的秘密你知道吗?
- Windows系统优化12个默认设置
- linux kafka离线安装,centos 离线安装confluent_kafka 模块
- linux vim基本操作,vim基本操作笔记
- 原神服务器维护后抽奖池会更新吗,原神:武器池改动,玩家的诉求再次得到反馈!PS端将与官服互通!...