一、题目:

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

最新文章

  1. django自带加密模块的使用
  2. 用flex做垂直居中
  3. JsonUtil
  4. 无光驱在32位windows系统下安装64位windows系统
  5. android学习之线性布局
  6. Hive安装(三)之奇怪的错误
  7. npm配置代理
  8. Java机试题目_怎样截取字符串
  9. Quartz1.8.5例子(十)
  10. How to effectively work with multiple files in Vim?
  11. dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty_nonatomic
  12. string下的 maketrans和translate
  13. MResource
  14. 文件搜索神器everything 你不知道的技巧总结
  15. Spring 之 配置(Java之负基础实战)
  16. Python函数篇:装饰器
  17. python 操作Memcached
  18. Chapter 3 Protecting the Data(1):理解权限
  19. 在远程连接一个 Wndows 10的情况下,重启远程机器
  20. java翻转字符串中的单词

热门文章

  1. WEB测试范围小结
  2. 【MVC框架】——什么是MVC框架
  3. HDU 4502
  4. HDU 1515
  5. asp.net控件的异步刷新
  6. Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧
  7. hdu 5411 CRB and Puzzle 矩阵高速幂
  8. Java web測试分为6个部分
  9. AWS之VPC、Subnet与CIDR
  10. luogu1447 能量采集