第九周 leetcode 72. Edit Distance(Hard)
来源:互联网 发布:中控考勤机数据修改 编辑:程序博客网 时间:2024/06/06 10:11
题目描述:
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[i][j]表示word1的前i项变得和word2的前j项一样需要多少步。用上述三种操作:
1.若i=j, 则需要执行的是替换操作,编辑一次,就可实现dp[i][j] –> d[i+1][j+1];
2.若i>j,则word1需要执行删除操作,编辑一次,就可实现dp[i+1][j] –> d[i+1][j+1];
3.若i 小于j, 则word1需要执行插入操作,编辑一次,就可实现dp[i][j+1] –> d[i+1][j+1];
由于可以在这三个操作中自由选择实现最短编辑距离,故只需要选择dp[i][j],dp[i+1][j],dp[i][j+1]中最小一个,就能实现最小。
我们可以写出状态转移方程: d[i+1][j+1] = min(dp[i][j+1], min(dp[i][j],dp[i+1][j] ) )。
代码:
class Solution {public: int minDistance(string word1, string word2) { int n = word1.size(); int m = word2.size(); int **dp = new int*[n+1]; for(int i = 0;i < n + 1;i++) dp[i] = new int[m+1]; //dp边界初始化 for(int i = 0;i < n + 1;i++) dp[i][0] = i; for(int i = 0;i < m + 1;i++) dp[0][i] = i; //转移方程 for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ if(word1[i] == word2[j]) dp[i+1][j+1] = dp[i][j]; else{ dp[i+1][j+1] = min(dp[i][j+1],min(dp[i+1][j],dp[i][j])) + 1; } } } int res = dp[n][m]; for(int i = 0;i <= n;i++) delete [] dp[i]; delete [] dp; return res; }};
代码运行结果:
阅读全文
0 0
- 第九周 leetcode 72. Edit Distance(Hard)
- (Leetcode)72. Edit Distance(hard)
- 算法第九周Edit Distance[hard]
- Leetcode 72. Edit Distance (Hard) (cpp)
- 72. Edit Distance Hard
- leetcode hard模式专杀之72. Edit Distance
- LeetCode刷题(C++)——Edit Distance(Hard)
- LeetCode 72. Edit Distance
- [LeetCode]72.Edit Distance
- LeetCode --- 72. Edit Distance
- [Leetcode] 72. Edit Distance
- [leetcode] 72.Edit Distance
- [leetcode] 72.Edit Distance
- Leetcode 72. Edit Distance
- LeetCode 72. Edit Distance
- leetcode 72. Edit Distance
- LeetCode 72. Edit Distance
- Leetcode 72. Edit Distance
- java初学者的浅谈(4)
- hihoCoder1080-更为复杂的买卖房屋姿势
- 异步加载在的js 在开发者工具中加载不出来
- JVM内存区域异常实战
- 智能指针的交叉引用问题及解决方法
- 第九周 leetcode 72. Edit Distance(Hard)
- UVa 10891(记忆化搜索,递推)Game of Sum
- 机器学习中的判别式模型及生成式模型
- hdu-1421 搬寝室
- 把基于web.xml的应用迁移到Spring Boot
- MySql 学习之索引详解
- 最小二乘法小结
- poj3304—Segments
- IO多路转接之epoll