leetcode 712
这道题的思路:我是根据最长公共子序列的思路得来的。
最长公共子序列是: d[i][j]表示字符串s1前i个(0~i-1)字符,和字符串s2前j个(0~j-1)字符的最长公共子序列。
分情况讨论:
当s1[i-1] == s2[j-1]的时候,d[i][j] = d[i-1][j-1]+1; 这个表示 ,当第i-1个字符相同时,就在之前d[i-1][j-1]的长度上加一
当s1[i-1] != s2[j-1]的时候,d[i][j] 的值就有可能有两种情况:
(1)d[i][j] = d[i-1][j],表示d[i][j]这个最长公共子序列,没有字符串s1[i-1]。那么就是相当于字符串s1(0~i-2)和字符串s2(0~j-1)的最长公共子序列
(2)d[i][j] = d[i][j-1], 表示d[i][j]这个最长公共子序列,没有字符串s2[i-1]。那么就是相当于字符串s1(0~i-1)和字符串s2(0~j-2)的最长公共子序列
综上,d[i][j] = max(d[i-1][j],d[i][j-1])
根据上面的这种思路,思考712这道题,这道题的意思是,删除字符,使得两个字符串相等,删除的字符相加起来,使得删除字符串的和最小。
可以设 d[i][i] 表示字符串s1前i个(0~i-1)字符和字符串s2前j个(0~j-1)字符保持相等的删除字符最小和
那么对于d[i][j] 也是分情况讨论:
当s1[i-1] ==s2[j-1] , 这就表示不需要删除s1[i-1]和s2[j-1],则d[i][j] = d[i-1][j-1]
当s1[i-1]!=s2[j-1], 两个字符都不要 ,则d[i][j] = d[i-1][j-1]+s1[i-1]+s2[j-1]
再讨论,无论s1[i-1]和s2[j-1]是否相等,
(1)不要s1[i-1],在s1[0~i-2]和 s2[0~j-1]中找删除字符串最小和
(2)不要s2[j-1], 在s1[0~i-1]和s2[0~j-2]中找删除字符串最小和
代码如下:
class Solution {
public:
int minimumDeleteSum(string s1, string s2) {
int m = s1.length();
int n =s2.length();
int d[m+][n+];
d[][] = ;
for(int i =;i<=m;i++)
d[i][] = d[i-][]+s1[i-];
for(int j =;j<=n;j++)
d[][j] = d[][j-]+s2[j-];
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
{
d[i][j] = min(d[i-][j]+s1[i-],d[i][j-]+s2[j-]);
if(s1[i-]==s2[j-])
d[i][j] = min(d[i][j],d[i-][j-]);
else
d[i][j] - min(d[i][j],d[i-][j-]+s1[i-]+s2[j-]);
}
return d[m][n];
}
};
leetcode 712的更多相关文章
- LN : leetcode 712 Minimum ASCII Delete Sum for Two Strings
lc 712 Minimum ASCII Delete Sum for Two Strings 712 Minimum ASCII Delete Sum for Two Strings Given t ...
- [LeetCode] 712. Minimum ASCII Delete Sum for Two Strings 两个字符串的最小ASCII删除和
Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...
- Java实现 LeetCode 712 两个字符串的最小ASCII删除和(最长公共子串&&ASCII值最小)
712. 两个字符串的最小ASCII删除和 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 ...
- Leetcode 712. 两个字符串的最小ASCII删除和
题目描述: https://leetcode-cn.com/problems/minimum-ascii-delete-sum-for-two-strings/ 解题思路: 也是典型的dp问题.利用二 ...
- LeetCode 712. Minimum ASCII Delete Sum for Two Strings
Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...
- [LeetCode] 583. Delete Operation for Two Strings 两个字符串的删除操作
Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 t ...
- Leetcode之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings)
Leetcode之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings) 给定两个字符串s1, s2,找到 ...
- 【leetcode】712. Minimum ASCII Delete Sum for Two Strings
题目如下: 解题思路:本题和[leetcode]583. Delete Operation for Two Strings 类似,区别在于word1[i] != word2[j]的时候,是删除word ...
- 【LeetCode】712. Minimum ASCII Delete Sum for Two Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
随机推荐
- 启动Spring boot项目报错:java.lang.IllegalArgumentException: LoggerFactory is not a Logback
java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on t ...
- linq 动态排序 order by
项目查询数据库使用的是linq 语法,可是后期需要用到不同字段的排序.各种纠结! 在网上找了各种资料 后面才找到两种方法 using System; using System.Collections. ...
- 记录Quarter的基本使用
原文:记录Quarter的基本使用 using Quartz; using Quartz.Impl; using Quartz.Impl.Matchers; using Quartz.Logging; ...
- 主机与虚拟机ping不通问题
在win10 上利用vm安装linux虚拟机,物理机与虚拟机之间不能ping通,除了检查物理机与虚拟机防火墙状态外,还要注意物理机设置的ip与虚拟机设置的ip,要在同一个ip段
- 修改CentOS默认yum源为国内镜像
参考文档 https://blog.csdn.net/inslow/article/details/54177191 国内主要开源的开源镜像站点应该是网易和阿里云了. 修改为163yum源-mirro ...
- 原生JS获取HTML DOM元素的8种方法
JS获取DOM元素的方法(8种) 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTagName) 通过类名 ...
- 虚拟机与宿主机可以互相ping通,但是外网不能
http://rickcheung.blog.51cto.com/913220/354429 1.CentOS 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc/resolv.conf ...
- Jenkins多环境持续集成架构实践
自动化部署主要是为了解决项目多.环境多.持续集成慢.部署操作麻烦.手动操作易出错.自动化运维等问题. Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建.部署.自动化 ...
- TweenMax—ScrambleText插件 实现类似电脑破译密码的特效
首先贴一下TweenMax的中文网:https://www.tweenmax.com.cn/ 首先先展示一下最后的效果,需要的就继续看下去: 那团乱码是会一直变的 那么如何实现上图的效果呢??? 其实 ...
- apk反编译工具包for Mac OS的使用
在本文中我将介绍如何在Mac OS X上使用apktool.jar.dex2jar.jd-gui来进行apk的反编译和查看源码.下面会提供每个工具的下载地址. 测试环境:OS X EI Capitan ...