博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
712. Minimum ASCII Delete Sum for Two Strings
阅读量:5094 次
发布时间:2019-06-13

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

问题

给定两个字符串,删除字符使得两个字符串相等,如何删使得删除的字符的ASCII和最小。

Input: s1 = "sea", s2 = "eat"

Output: 231
Explanation: 115(s) + 116(t) = 231

思路

用dp[i][j]表示s1[:i]和s2[:j]之间的解。

如果s1[i-1] == s2[j-1],dp[i][j] = dp[i-1][j-1]。两字符相等,不需要删除,等于之前的值。
否则,dp[i][j] = min(dp[i-1][j]+ s1[i-1], dp[i][j-1] + s2[j-1])。不等,需要删除,在之前的结果基础上,计算删s1字符的代价和删s2字符的代价哪个小。

时间复杂度O(n*m),空间复杂度O(n*m)

代码

class Solution(object):    def minimumDeleteSum(self, s1, s2):        """        :type s1: str        :type s2: str        :rtype: int        """        dp = [[0 for _ in range(len(s2)+1)] for _ in range(len(s1)+1)]        for i in range(1,len(s2)+1):            dp[0][i] = dp[0][i-1] + ord(s2[i-1])        for j in range(1,len(s1)+1):            dp[j][0] = dp[j-1][0] + ord(s1[j-1])        for i in range(1,len(s1)+1):            for j in range(1,len(s2)+1):                if(s1[i-1]==s2[j-1]):                    dp[i][j] = dp[i-1][j-1]                else:                    dp[i][j] = min(dp[i-1][j]+ord(s1[i-1]), dp[i][j-1]+ord(s2[j-1]))        return dp[len(s1)][len(s2)]

相关知识

ord('a') == 97  #获取字符对应的ASCII码chr(97) == 'a'  #获取ASCII码对应的字符chr(0x61) == 'a' #可以输入十六进制hex(97) == '0x61'  #获取整数对应的十六进制字符串oct(97) == '0141'  #获取整数对应的八进制字符串

类似题目

转载于:https://www.cnblogs.com/liaohuiqiang/p/9756753.html

你可能感兴趣的文章
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
[Data Structure & Algorithm] 有向无环图的拓扑排序及关键路径
查看>>
git 常用命令
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
Vue音乐项目笔记(三)
查看>>
遍历Map对象
查看>>
计算剪贴板里仿制的代码行数
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
eclipse远程连接hive
查看>>
db2循环
查看>>
C#语言-04.OOP基础
查看>>
1)session总结
查看>>
什么?云数据库也能C位出道?
查看>>
PHP深浅拷贝
查看>>
SDN第四次作业
查看>>
ActiveMQ(4) ActiveMQ JDBC 持久化 Mysql 数据库
查看>>
DM8168 DVRRDK软件框架研究
查看>>