72.Edit Distance---dp
题目链接:https://leetcode.com/problems/edit-distance/description/
题目大意:找出两个字符串之间的编辑距离(每次变化都只消耗一步)。
法一(借鉴):经典dp。代码如下(耗时15ms):
//dp公式:dp[i][j]表示第一个字符串前i个字符到第二个字符串前j个字符的编辑距离长度
//当word1[i]==word2[j]时,dp[i][j]=dp[i-1][j-1]
//否则,dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
public int minDistance(String word1, String word2) {
int len1 = word1.length(), len2 = word2.length();
int dp[][] = new int[len1+1][len2+1];
//初始化
for(int i = 0; i <= len1; i++) {
dp[i][0] = i;
}
for(int i = 0; i <= len2; i++) {
dp[0][i] = i;
}
for(int i = 1; i <= len1; i++) {//下标从1开始
for(int j = 1; j <= len2; j++) {
if(word1.charAt(i - 1) == word2.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1];
}
else {
int min = Integer.MAX_VALUE;
if(min > dp[i - 1][j - 1]) {
min = dp[i - 1][j - 1];
}
if(min > dp[i][j - 1]) {
min = dp[i][j - 1];
}
if(min > dp[i - 1][j]) {
min = dp[i - 1][j];
}
dp[i][j] = min + 1;
}
}
}
return dp[len1][len2];
}
dp数组变化(例子:abc到acde的编辑距离):
| 0 | 1("a") | 2("c") | 3("d") | 4("e") |
| 1("a") | 0(a->a) | 1(a->ac) | 2(a->acd) | 3(a->acde) |
| 2("b") | 1(ab->a) | 1(ab->ac) | 2(ab->acd) | 3(ab->acde) |
| 3("c") | 2(abc->a) | 1(abc->ac) | 2(abc->acd) | 3(abc->acde) |
从上表可清楚看见最后结果在dp[3][4]中。
dp数组填充顺序:从左上到右下,即每一次数值计算都要用到左边,上边,左上的数据。
72.Edit Distance---dp的更多相关文章
- 【Leetcode】72 Edit Distance
72. Edit Distance Given two words word1 and word2, find the minimum number of steps required to conv ...
- 刷题72. Edit Distance
一.题目说明 题目72. Edit Distance,计算将word1转换为word2最少需要的操作.操作包含:插入一个字符,删除一个字符,替换一个字符.本题难度为Hard! 二.我的解答 这个题目一 ...
- [LeetCode] 72. Edit Distance 编辑距离
Given two words word1 and word2, find the minimum number of operations required to convert word1 to ...
- 72. Edit Distance
题目: Given two words word1 and word2, find the minimum number of steps required to convert word1 to w ...
- [LeetCode] 72. Edit Distance(最短编辑距离)
传送门 Description Given two words word1 and word2, find the minimum number of steps required to conver ...
- leetCode 72.Edit Distance (编辑距离) 解题思路和方法
Edit Distance Given two words word1 and word2, find the minimum number of steps required to convert ...
- 72. Edit Distance(困难,确实挺难的,但很经典,双序列DP问题)
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- 72. Edit Distance (String; DP)
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- [leetcode DP]72. Edit Distance
计算最少用多少不把word1变为word2, 思路:建立一个dp表,行为word1的长度,宽为word2的长度 1.边界条件,dp[i][0] = i,dp[0][j]=j 2.最优子问题,考虑已经知 ...
- 第十八周 Leetcode 72. Edit Distance(HARD) O(N^2)DP
Leetcode72 看起来比较棘手的一道题(列DP方程还是要大胆猜想..) DP方程该怎么列呢? dp[i][j]表示字符串a[0....i-1]转化为b[0....j-1]的最少距离 转移方程分三 ...
随机推荐
- lucence学习系列之一 基本概念
1. Lucence基本概念 Lucence是一个java编写的全文检索类库,使用它可以为一个应用或者站点增加检索功能. 它通过增加内容到一个全文索引来完成检索功能.然后允许你基于这个索引去查询,返回 ...
- C++解析(10):struct和class的区别
0.目录 1.默认访问级别 2.默认继承方式 2.1 分别独立继承 2.2 struct继承class 2.3 class继承struct 3.小结 1.默认访问级别 在用struct定义类时,所有成 ...
- 常州day1p5
给一个 n∗m 的矩阵,矩阵的每个格子上有一个不超过 30 的非负整数. 我们定义一条合法的路线是从(1,1)开始只能向右和向下移动到达(n,m)的路线. 定义数列 A1,A2,A3,..,An+m− ...
- 【BZOJ4516】生成魔咒(后缀自动机)
[BZOJ4516]生成魔咒(后缀自动机) 题面 BZOJ Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔咒串 [1,2]. ...
- STM32自动生成精美图案
http://note.youdao.com/noteshare?id=65f237225624d22fe18f4aaaeec8db07
- php网摘收藏
1.thinkphp3.2.3开发手册: http://document.thinkphp.cn/manual_3_2.html 2.ThinkPHP3.2.3的函数汇总:http://www.thi ...
- c语言时间计算
C语言使用time_t结构体表示时间戳,它本质上是个long类型. 我们可以使用如下函数获取当前时间的时间戳: time_t time(time_t* timer) 函数功能:得到从标准计时点(一般是 ...
- Ubuntu 14.04.3 window10双系统情遇到'Disconnected: You are now offline'问题
笔电是win10系统,单独开除50G做了一个Ubuntu系统,安装的是14.04.03版本,安装成功后,发现wifi连接不上,选择wifi并输入密码后提示:“Disconnected: You are ...
- 2015年IPC网络摄像机技术发展现状分析
网络摄像机将图像转换为基于TCP/IP网络标准的数据包,使摄像机所摄的画面通过RJ-45以太网接口或WIFI WLAN无线接口直接传送到网络上,通过网络即可远端监视画面. 一.网络摄像机的基本原理 网 ...
- 怎样把一个DIV放到另一个div右下角
怎样把一个DIV放到另一个div右下角??? 借助CSS定位来实现,你将右下角的那个DIV放在另一个DIV里面,参考代码如下示: <div id="box1"> < ...