Leetcode题集——edit-distance
来源:互联网 发布:js高阶函数 编辑:程序博客网 时间:2024/06/06 13: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
动态规划法:
给定两个字符串A和B,由A转成B所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
例如将A(kitten)转成B(sitting):
sitten (k→s)替换
sittin (e→i)替换
sitting (→g)插入
思路:
如果我们用 i 表示当前字符串 A 的下标,j 表示当前字符串 B 的下标。 如果我们用d[i, j] 来表示A[1, ... , i] B[1, ... , j] 之间的最少编辑操作数。那么我们会有以下发现:
1. d[0, j] = j;
2. d[i, 0] = i;
3. d[i, j] = d[i-1, j - 1] if A[i] == B[j]
4. d[i, j] = min(d[i-1, j - 1], d[i, j - 1], d[i-1, j]) + 1 if A[i] != B[j]
所以,要找出最小编辑操作数,只需要从底自上判断就可以了。代码如下:
注意:二维数组内存申请及释放方式!!!
int minDistance(string word1, string word2) { int n1=word1.size(); int n2=word2.size(); if(n1==0) return n2; if(n2==0) return n1; //动态分配二维数组,n1+1个一维数组 int **a; a=new int*[n1+1]; //为每一个一维数组申请内存n2+1 for(int i=0;i<=n1;i++) a[i]=new int[n2+1]; //数组初始化为-1 for(int i=0;i<=n1;i++) { for(int j=0;j<=n2;j++) a[i][j]=-1; } //初始化数组的第1行和第1列 for(int i=0;i<=n1;i++) a[i][0]=i; for(int j=0;j<=n2;j++) a[0][j]=j; for(int i=1;i<=n1;i++) { for(int j=1;j<=n2;j++) { if(word1[i-1]==word2[j-1]) a[i][j]=a[i-1][j-1]; else { int min=a[i-1][j]<a[i-1][j-1]?a[i-1][j]:a[i-1][j-1]; min=min<a[i][j-1]?min:a[i][j-1]; a[i][j]=min+1; } } } int tmp=a[n1][n2]; //先释放一维空间内存 for(int i=0;i<=n1;i++) { delete []a[i]; a[i]=NULL;//不要忘了置空 } //再释放二维空间内存 delete []a; a=NULL; return tmp; }
- Leetcode题集——edit-distance
- LeetCode —— Edit Distance
- leetcode——Edit Distance
- LeetCode—72.Edit Distance
- leetcode 072 —— Edit Distance
- LeetCode——72. Edit Distance
- LeetCode算法题——Edit Distance
- LeetCode—161. One Edit Distance
- leetcode——72——Edit Distance
- 【leetcode】String——Edit Distance(72)
- Leetcode——72 Edit Distance && 97Interleaving String
- LeetCode刷题(C++)——Edit Distance(Hard)
- LeetCode 72 — Edit Distance(C++ Python)
- LeetCode—**Edit Distance 计算两个字符串之间的距离
- LeetCode: Edit Distance
- LeetCode Edit Distance
- LeetCode: Edit Distance
- [Leetcode] Edit Distance
- test
- Fragment全解析系列
- BDD测试利器:mocha+should.js
- POJ 2653 Pick-up sticks
- Seinfeld
- Leetcode题集——edit-distance
- sqlserver——你真的懂你写的Sql语句么?
- 博弈_______Stone Game II(hdu 4388 2012多校第九场)
- 开始的开始
- Windows下用DirectShow查找摄像头(含分辨率)和麦克风
- HDU 1231 最大连续子序列
- iframe和response.sendRedirect()跳转到父页面
- 编译ncurses错误处理及解决办法
- redis配置认证密码