笔试题86. LeetCode OJ (72)
来源:互联网 发布:淘宝的企业店铺申请 编辑:程序博客网 时间:2024/05/16 08:52
Edit Distance
题目意思是将一个字符串变换为另一个字符串所需要的最少的操作次数。变换的方法包括:
1.替换一个字符
2.插入一个字符
3.删除一个字符
明白了题意之后,我们就可以动手去做了,这是一个动态规划的题。拿到这个题目的时候,我感觉有点无法动手,老是想着是否存在着某些特殊情况需要我们特殊处理。这种题目确实不怎么直观,所以一定要注意方法。
假设两个字符串分别为 str1,str2
注意下面所说的str1[x]和str2[y]之前的序列相同是包括x和y位置的。
若我们知道st1[i-1]和str2[j-1]之前的序列是相同的,那么我们是否可以利用这一点来来判断str1[i]到str2[j]需要怎么变化,或者若是str1[i-1]和str2[j]之前的序列已经相同了,或者str1[i]和str2[j-1]之前的序列相同呢?我们该怎么样对str1进行操作使str1[i]和str2[j]之前的序列完全相同。
我们可以使用 steps[i][j] 表示将str1[0...i]变换到str2[0...j]所需要的操作次数
1.替换,若是str1[i-1]和str2[j-1]之前序列已经相同了,那么使str1[i]和str2[j]相同的话,那么:
| steps[i-1][j-1] ( str1[i] == str2[j])
steps[i][j] = |
| steps[i-1][j-1] + 1 (str1[i] != str2[j])
2.插入,若是str1[0...i]和str2[0...j-1]之前的序列相同的话,那么str1插入一个数据刚好满足条件,那么:
steps[i][j] = steps[i][j-1] + 1
3.删除,若是str1[0...i-1]和str2[0...j]之前的序列是相同的话,那么删除str[i]可以满足条件,那么:
steps[i][j] = steps[i-1][j] + 1;
我们可以推知:steps[i][0] = i,steps[0][j] = j
结合上述分析,我们就可以写出代码了,代码如下:
class Solution {public: int minDistance(string word1, string word2) { vector< vector<int> > steps(word1.size()+1, vector<int> (word2.size()+1)); for(int i=0; i<word1.size()+1; ++i) { for(int j=0; j<word2.size()+1; ++j) { if(0 == i) { steps[i][j] = j; } else if(0 == j) { steps[i][j] = i; } else { steps[i][j] = min( steps[i-1][j-1] + (word1[i-1]==word2[j-1] ? 0:1), min(steps[i-1][j]+1,steps[i][j-1]+1)); } } } return steps[word1.size()][word2.size()]; }};
运行结果如下:
- 笔试题86. LeetCode OJ (72)
- 笔试题14. LeetCode OJ (1)
- 笔试题15. LeetCode OJ (2)
- 笔试题16. LeetCode OJ (3)
- 笔试题17. LeetCode OJ (4)
- 笔试题18. LeetCode OJ (7)
- 笔试题19. LeetCode OJ (5)
- 笔试题20. LeetCode OJ (6)
- 笔试题21 . LeetCode OJ (8)
- 笔试题22. LeetCode OJ (9)
- 笔试题23. LeetCode OJ (10)
- 笔试题24. LeetCode OJ (11)
- 笔试题25. LeetCode OJ (12)
- 笔试题26. LeetCode OJ (13)
- 笔试题27. LeetCode OJ (14)
- 笔试题28. LeetCode OJ (15)
- 笔试题29. LeetCode OJ (16)
- 笔试题30. LeetCode OJ (17)
- mysql主从配置
- 获取总内存?
- [数据结构]第八章-字典
- 计算机运算中对小数的处理
- hadoop或者spark 增加节点
- 笔试题86. LeetCode OJ (72)
- StringBuffer、StringBuilder的区别?
- jquery异步调用自数据库获取值通过knockoutjs赋值给职位二级菜单导致的jquery的hover事件不执行的例子
- 聊聊并发-Java中的Copy-On-Write容器
- 支付宝新版支付接口Java后台签名
- Doge学HTML -2
- RxRetrofit-终极封装-深入浅出&网络请求
- flask 中上传保存文件。 wtf扩展下
- Formatter.formatFileSize()原理?