博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法61---两个字符串的最小ASCII删除和【动态规划】
阅读量:5317 次
发布时间:2019-06-14

本文共 1711 字,大约阅读时间需要 5 分钟。

一、题目:

给定两个字符串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  0        if 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] = 0        for 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

你可能感兴趣的文章
PyTorch 1.0 中文文档:torch.nn.init
查看>>
android怎么实现自动接听
查看>>
动态规划小结 - 一维动态规划 - 时间复杂度 O(n),题 [LeetCode] Jump Game,Decode Ways...
查看>>
zbb20181217 通过Tomcat配置、启动Springboot项目war包程序
查看>>
javascript 检测手机设备 百度siteapp下的一款跳转的产品,使用起来很方便。你可以用这款JS跳转到手机版,也可以跳转到任何你想跳转的位置。...
查看>>
Excel:合并某一列
查看>>
原型1
查看>>
字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
查看>>
深入理解Static关键字修饰符
查看>>
国际化之DateFormat、NumberFormat
查看>>
IIS部署PHP项目并与mysql完美结合
查看>>
iOS 查看崩溃日志与符号化
查看>>
在ASP.NET MVC中使用 Bootstrap table插件
查看>>
SQL Server 2008、SQL Server 2008R2 自动备份数据库
查看>>
[转]菲尔人格测试
查看>>
ligerui_ligerTree_006_ligerui事件支持
查看>>
HDU3038 How Many Answers Are Wrong 并查集
查看>>
UOJ#266. 【清华集训2016】Alice和Bob又在玩游戏 博弈,DSU on Tree,Trie
查看>>
What's the Difference between the frame and the bounds?
查看>>
oracle之二表和表空间的关系
查看>>