[leetcode712] Minimum ASCII Delete Sum for Two Strings
public int minimumDeleteSum(String s1, String s2) {
/*
标准的动态规划题目,难点在于想出将两个字符串删除到相同的过程
这里从两个字符串的开头字符考虑,一个一个得考虑到最后一个,我们用二维数组dp[i][j]代表字符串1前i个字符和字符串2前j个字符实现相同所需要
删除的ASCII value,有三种方法可以到达dp[i][j]:
1.dp[i-1][j] + str1[i]:由于从dp[i-1][j]到dp[i][j]是多考虑了str1的一个字符,但是str2字符数没变,所以要想相同,必须删除str[i],考虑value的话就是加上str[i]
2.dp[i][j-1] + str1[j]:对应于1,这个是多考虑str2的一个字符,所以要删除str2[j]
3.dp[i-1][j-1] + a,这里是考虑两个str都加了一个,所以str1[i] =str2[j]时,a=0;str1[i] !=str2[j]时,两个都要删除,a=str1[i] +str2[j]
这三种情况每次比较出最小的来,最后返回dp[str1.length][str2.length](这里字符串下标从1开始,因为我们考虑dp数组的第0行代表str1还啥也没有,第0列代表str2啥也没有)
*/
int m = s1.length();
int n = s2.length();
int[][] dp = new int[m+1][n+1];
//初始化动态数组,就是第0行数据和第1行数据,注意由于下标从1开始,所以charAt的时候要-1
for (int i = 1;i < m+1;i++)
dp[i][0] = dp[i-1][0] + s1.charAt(i-1);
for (int i = 1;i < n+1;i++)
dp[0][i] = dp[0][i-1] + s2.charAt(i-1);
for (int i = 1;i < m+1;i++)
{
for (int j = 1;j < n+1;j++)
{
//先看s1[i]和s2[j]是不是相等,确定a
int a =(s1.charAt(i-1) == s2.charAt(j-1))? 0 : s1.charAt(i-1)+s2.charAt(j-1);
//比较三种情况
dp[i][j] = Math.min(dp[i-1][j-1]+a,Math.min(dp[i-1][j] + s1.charAt(i-1),dp[i][j-1] + s2.charAt(j-1)));
}
}
return dp[m][n];
}
[leetcode712] Minimum ASCII Delete Sum for Two Strings的更多相关文章
- 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 ...
- LC 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之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings)
Leetcode之动态规划(DP)专题-712. 两个字符串的最小ASCII删除和(Minimum ASCII Delete Sum for Two Strings) 给定两个字符串s1, s2,找到 ...
- [LeetCode] 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. ...
- [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. ...
- 【LeetCode】712. Minimum ASCII Delete Sum for Two Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【leetcode】712. Minimum ASCII Delete Sum for Two Strings
题目如下: 解题思路:本题和[leetcode]583. Delete Operation for Two Strings 类似,区别在于word1[i] != word2[j]的时候,是删除word ...
- [Swift]LeetCode712. 两个字符串的最小ASCII删除和 | 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. ...
- 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 eq ...
随机推荐
- Alpha冲刺-第七次冲刺笔记
Alpha冲刺-冲刺笔记 这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE2 这个作业要求在哪里 https://edu.cnblogs. ...
- python虚拟环境相关设置备忘
sudo pip install virtualenv #安装虚拟环境 sudo pip install virtualenvwrapper #安装虚拟环境管理工具nano ~/.bashrc #修 ...
- go语言之---数组(array)和切片(slice)
一.数组 1.什么是数组? 1.数组是一系列同一类型数据的集合 2.数组中包含的每个数据被称为数组元素 3.一个数组中包含的元素个数成为数组长度 4.数组的长度是固定的 5.一个数组可以由零个或者多个 ...
- DockerFile理解与应用
1.DockerFile是什么? DockerFile是用来构建Docker镜像的构建文件,一般分为四部分:基础镜像信息.维护者信息.镜像操作指令和容器启动时执行指令,'#' 为 Dockerfile ...
- 记一次MySQL出现Waiting for table metadata lock的原因、排查过程与解决方法
任务背景:将sql文件通过shell直接导入到mysql中执行(还原) bug表现:导入后java项目卡死 过程: 1.网上乱搜一通,无意间看到一篇文章,这篇文章说明了如何开启mysql的genera ...
- Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?
这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...
- urllib.request.urlopen(req).read().decode解析http报文报“utf-8 codec can not decode”错处理
老猿前期执行如下代码时报"'utf-8' codec can't decode byte"错,代码及错误信息如下: >>> import urllib.reque ...
- leetcode(三)——2020.05.31
(上周7道题完成) 本周leetcode题目(from leetcode hot100): 15 17 19 21 33 94 42 额外完成: 22(回溯), 8, 31,200
- buucitf-[极客大挑战 2020]Roamphp1-Welcome
打开靶机,发现什么也没有,因为极客大挑战有hint.txt,里面说尝试换一种请求的方式,bp抓包,然后发送了POST请求,出现了下面的界面 这个还是挺简单的,因为是极客大挑战上的第一波题,关键是这个如 ...
- element ui只输入数字校验
注意:圈起来的两个地方,刚开始忘记写type='number'了,导致可以输入'123abc'这样的,之后加上了就OK了