Edit Distance--LeetCode
来源:互联网 发布:spss数据差异性分析 编辑:程序博客网 时间:2024/06/05 08:16
题目:
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
这也是一个典型的DP问题,我们同样需要一个记录变量,dp[i][j],记录包括word1[i]在内的字符串和包括word2[j+1]
在内的字符串的编辑距离,
那么如果word1[i+1] == word2[j+1] dp[i+1][j+1] = dp[i][j],否则 dp[i+1][j+1] = dp[i][j]+1,
不过也有可能dp[i+1][j+1] = dp[i+1][j]+1 或者dp[i][j+1]+1
实际上 dp[i+1][j+1]应该是三种情况的最小值
我们来分析下为什么是这三种情况中的最小值。这个题目是编程之美中的题目,我借用编程之美中的解释来说明一下,考虑如何才能把这个问题转化成规模较小的同样的问题。如果有两个串A=xabcdae和B=xfdfa,他们的第一个字符是相同的,只要计算A【2....7】和B[2....5]的距离就可以了。但是如果两个串的第一个字符不相同。那么可以通过如下的操作(lenA和lenB分别是A串和B串的长度)
1、删除A串的第一个字符,然后计算A[2....lenA]和B[1,,,,,,lenB]的距离
2、删除B串的第一个字符,然后计算A[1....lenA]和B[2,,,,,,lenB]的距离
3、修改A串的第一个字符为B串的第一个字符,然后计算A[2....lenA]和B[2,,,,,,lenB]的距离
4、修改B串的第一个字符为A串的第一个字符,然后计算A[2....lenA]和B[2,,,,,,lenB]的距离
5、增加B串的第一个字符到A串的第一个字符之前,然后计算A[1....lenA]和B[2,,,,,,lenB]的距离
6、增加A串的第一个字符到B串的第一个字符之前,然后计算A[2....lenA]和B[1,,,,,,lenB]的距离
#include <iostream>#include <vector>#include <string>#include <limits>using namespace std; int Edit_distance(string& s1,string& s2){vector<vector<int> > dp(s1.size());int i,j;for(i=0;i<dp.size();i++)dp[i].assign(s2.size(),numeric_limits<int>::max());if(s1[0]==s2[0])dp[0][0] =0;elsedp[0][0] =1;for(i=1;i<dp[0].size();i++)if(s1[0] == s2[i])dp[0][i] = i;elsedp[0][i] = dp[0][i-1]+1;for(i=1;i<dp.size();i++)if(s1[i] == s2[0])dp[i][0] = i;elsedp[i][0] = dp[i-1][0]+1; for(i=1;i<dp.size();i++){for(j=1;j<dp[0].size();j++){if(s1[i] == s2[j])dp[i][j] = dp[i-1][j-1];elsedp[i][j] = min(dp[i-1][j-1]+1,min(dp[i][j-1]+1,dp[i-1][j]+1)); }}return dp[s1.size()-1][s2.size()-1];}int main() {string s1("abcd");string s2("adc");cout<<Edit_distance(s1,s2)<<endl;;cout<<minDistance(s1,s2)<<endl;return 0;}
不过在申请空间时,也可以多申请一个,比需要的空间大一,DP问题在知道了方程以后,还需要注意的就是初始化。对变量的初始化过程也是非常重要的。
- LeetCode: Edit Distance
- LeetCode Edit Distance
- LeetCode: Edit Distance
- [Leetcode] Edit Distance
- leetcode 19: Edit Distance
- [LeetCode] Edit Distance
- [Leetcode] Edit Distance
- LeetCode Edit Distance
- [LeetCode] Edit Distance
- [LeetCode]Edit Distance
- Leetcode: Edit Distance
- [leetcode]Edit Distance
- LeetCode-Edit Distance
- [leetcode] Edit Distance
- LeetCode - Edit Distance
- leetcode之Edit Distance
- leetcode edit distance
- 【leetcode】Edit Distance
- 次小生成树
- union关键字
- hdu 2191 hdu 2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 多重背包
- 李红霞第二章第六题
- 求职面试(字符串反转,单词反转)
- Edit Distance--LeetCode
- 标题:李白打酒
- 电信141p51第3题
- Android ActionBar高级自定义——设置标题居中和添加控件
- HDU 1242 Rescue (bfs + priority_queue)
- Android开发_扁平化按钮的实现
- 【图像处理】基于OpenCV底层实现的滤波
- python3学习笔记1:python3与Python2中的差异
- POJ 1222 EXTENDED LIGHTS OUT 高斯消元 异或方程 (水