Edit Distance 解题报告
来源:互联网 发布:word mac版 编辑:程序博客网 时间:2024/06/05 05:19
题目链接
这是道比较经典的动态规划题。
状态转移方程:
对于字符串x,y,编辑距离E(i,j)为E(i,j) = min(1 + E(i-1,j), 1 + E(i,j-1), diff(i,j) + E(i-1,j-1))diff(i,j) = if x[i] == y[j] then 0 else 1
初始状态:
E(0,i) = E(j,0) = 0
伪代码是
for i = 0,1,2,...,m: E(i,0) = ifor j = 1,2,...,m: E(0,j) = jfor i = 1,2,...,m: for j = 1,2,...,n: diff(i,j) = if x[i] == y[j] then 0 else 1 E(i,j) = min(1 + E(i-1,j), 1 + E(i,j-1), diff(i,j) + E(i-1,j-1))容易看出复杂度是O(mn)的
c++代码实现:
class Solution {public: int minDistance(string word1, string word2) { int r = word1.length() + 1; int c = word2.length() + 1; int **E = new int*[r]; for(int i = 0; i < r; i++){ E[i] = new int[c]; for(int j = 0; j < c; j++){ E[i][j] = 0; } } for(int i = 0; i < r; i++){ E[i][0] = i; } for(int j = 0; j < c; j++){ E[0][j] = j; } for(int i = 1; i < r; i++){ for(int j = 1; j < c; j++){ E[i][j] = min(min(1+E[i-1][j],1+E[i][j-1]), int(!(word1[i-1] == word2[j-1])) + E[i-1][j-1]); } } return E[r-1][c-1]; }};
因为字符数组下标从0开始,其中转化走了一些弯路。
提交结果如下:
阅读全文
0 0
- Edit Distance 解题报告
- [LeetCode] Edit Distance 解题报告
- Edit Distance [Leetcode解题报告]
- [leetcode] One Edit Distance 解题报告
- [leetcode] 72. Edit Distance 解题报告
- [Leetcode] 72. Edit Distance 解题报告
- [Leetcode] 161. One Edit Distance 解题报告
- 【LeetCode】72.Edit Distance解题报告
- POJ 3356 AGTC 解题报告(Edit Distance,DP)
- Leetcode 72. Edit Distance 编辑距离 解题报告
- leecode 解题总结:72. Edit Distance
- 【LeetCode】Hamming Distance 解题报告
- POJ1986 Distance Queries LCA pascal 解题报告
- POJ-1986-Distance Queries 解题报告
- [leetcode] 243. Shortest Word Distance 解题报告
- 【POJ 1986】 Distance Queries 解题报告
- leetcode解题报告--461.Hamming Distance
- POJ 1657 Distance on Chessboard 解题报告
- 第九周项目三——利用二叉树遍历思想解决问题
- Python代码Linux
- 计算后缀表达式、Java
- codeforces 858d(字典树)
- 用SQL实现 excel常用操作
- Edit Distance 解题报告
- Java数据类型和运算符
- c++中vector(向量)的用法
- 百度地图之显示地图
- JPanel面板的综合运用
- 第一次月总结!
- Hadoop常用命令
- Ubuntu Navicat for MySQL 安装以及解决方案
- PAT考试乙级1007(C语言实现)