LintCode: Edit Distance
dp注意问题
递推式
初值
空间优化
1. bfs
题目里有“最小”字样,符合bfs关键词:上界len(S)+len(T)
实际上不可行;
2. dp
删除字符很麻烦
换个角度,变为字符串“对齐问题”:
S = ABCF
T = DBFG
S:A B C F -
T:D B - F G
对应位置相同则不扣分,不同则扣一分(需要修改一次)
两个特殊字符“-”不会对应
S位置“-”代表增字符
T位置“-”代表删字符
使扣分最少
dp[i][j]表示S的前i个位置和T的前j个位置对齐的最少得分
dp[i][j] = min(dp[i-1][j-1]+same(i,j), dp[i-1][j]+1, dp[i][j-1]+1)
dp[i-1][j-1]+same(i,j)对应S第i个字符和T的第j个字符对齐
dp[i-1][j]+1对应S第i个字符和“-”对齐,即删掉S中第i个字符
dp[i][j-1]+1对应T第j个字符和“-”对齐,即在S中加入该字符
初值
dp[0][j] = j, j>=0
dp[i][0] = i, i>=0
时间复杂度:O(len(S)*len(T))
空间优化:省掉一维
对每个i,正向循环j
注意保存dp[i-1][j-1],因为j-1已经是新值
1 class Solution { 2 public: 3 /** 4 * @param word1 & word2: Two string. 5 * @return: The minimum number of steps. 6 */ 7 int minDistance(string word1, string word2) { 8 // write your code here 9 int m = word1.length(), n = word2.length(); 10 vector<vector<int> > dp(m + 1, vector<int>(n + 1)); 11 for (int i = 0; i <= m; ++i) { 12 for (int j = 0; j <= n; ++j) { 13 if ( i== 0 ) { 14 dp[i][j] = j; 15 } else if (j == 0) { 16 dp[i][j] = i; 17 } else { 18 dp[i][j] = min(dp[i - 1][j - 1] + ((word1[i - 1] == word2[j - 1])?0:1), 19 min(dp[i][j - 1] + 1, dp[i - 1][j] + 1) 20 ); 21 } 22 } 23 } 24 return dp[m][n]; 25 } 26 };
空间优化
1 class Solution { 2 public: 3 /** 4 * @param word1 & word2: Two string. 5 * @return: The minimum number of steps. 6 */ 7 int minDistance(string word1, string word2) { 8 // write your code here 9 int m = word1.length(), n = word2.length(); 10 // vector<vector<int> > dp(m + 1, vector<int>(n + 1)); 11 vector<int> dp(n + 1); 12 for (int i = 0; i <= m; ++i) { 13 int last; 14 for (int j = 0; j <= n; ++j) { 15 if ( i== 0 ) { 16 dp[j] = j; 17 } else if (j == 0) { 18 last = dp[j]; 19 dp[j] = i; 20 } else { 21 int tmp = dp[j]; 22 dp[j] = min(last + ((word1[i - 1] == word2[j - 1])?0:1), 23 min(dp[j - 1] + 1, dp[j] + 1) 24 ); 25 last = tmp; 26 } 27 } 28 } 29 return dp[n]; 30 } 31 };
LintCode: Edit Distance相关推荐
- 字符串编辑距离(Edit Distance)
一.问题描述 定义 字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符 ...
- leetcode Edit Distance
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4051082.html 题目链接:leetcode Edit Distance 最短编辑距离, ...
- 详解编辑距离(Edit Distance)及其代码实现
概述 编辑距离(Minimum Edit Distance,MED),由俄罗斯科学家 Vladimir Levenshtein 在1965年提出,也因此而得名 Levenshtein Distance ...
- Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶
sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过b ...
- Edit Distance Python源码及支持包的实现
Edit Distance Python源码及支持包的实现 编辑距离 编辑距离 又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance)指两个字串之间,由一个转成另一个所需的最少 ...
- [leetcode]Edit Distance
先给一个例子,两个字符串eeba和abca相似度是多少呢,edit distance是一个很好的度量,定义从字符串a变到字符串b,所需要的最少的操作步骤(插入,删除,更改)为两个字符串之间的编辑距离. ...
- 中石油训练赛 - Edit Distance(思维+构造)
题目描述 A binary string is a non-empty sequence of 0's and 1's, e.g., 010110, 1, 11101, etc. The edit d ...
- mysql 编辑距离 搜索_最小编辑距离(Minimum Edit Distance)
最小编辑距离 1)定义 编辑距离(Minimum Edit Distance,MED),又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数.允许的编辑操作包括 ...
- python 编辑距离_python实现编辑距离edit distance
1.定义理解 edit distance--指两个字符串之间,一个转为另一个的最小编辑次数(方式有:插入/删除/替换) 若edit distance越小,则字符串之间的相似度越高. 例1: 输入: w ...
最新文章
- 21条高效时间管理法则
- python 元组 字典 列表 序列化与反序列化
- MySQL解决root用户密码丢失问题
- Docker 图形界面管理工具 -- Portainer
- 嵌套的json ajax,通过jquery或javascript通过AJAX读取嵌套的JSON并输出到表中
- LINUX编译mate-desktop/pluma-1.26.0文本编辑器
- pyqt5 显示更新进度条_python如何通过pyqt5实现进度条
- 谭浩强C语言(第三版)习题5.7
- python3的字符串操作
- 毕业论文答辩技巧及注意事项(附答辩自述模板)~
- NVIDIA显卡如何显示fps?
- ThreadPoolExecutor线程池终止
- java ssl 双向认证_java实现 SSL双向认证
- 设置字根,配合rem适配(多尺寸屏幕的适配)
- 通过className属性给一个元素追加新class(addClass函数)
- 用卷积神经网络(CNN)识别文字
- 使用VMware安装Ubuntu虚拟机 - 完整教程
- 调用iframe子页面中的函数
- 服务器文件上传500报错,500 InternalServerError
- 大型电商网站架构分析