583. Delete Operation for Two Strings Medium
来源:互联网 发布:唐国强诸葛亮知乎 编辑:程序博客网 时间:2024/05/22 10:31
这道题需要我们通过在两个字符串中分别删除一些字符,使得他们成为相等的字符串。跟编辑距离类似,我们采用动态规划来解决。(参考 http://blog.csdn.net/hhygcy/article/details/3948969)
实际上,我们需要做的其实是求出最长公共子序列(Longest Common Subsequence)。注意这里是子序列,不是子串,是可以不连续的,只要保持相对顺序就可以了。
我们用dis[i][j]来表示字符串word1长为i的子串和字符串word2长为j的子串,它们的最长公共子序列的长度。然后考虑状态转移方程。
class Solution {public: int minDistance(string word1, string word2) { int dis[word1.size() + 1][word2.size() + 1]; for(int i = 0; i <= word1.size(); i++){ for(int j = 0; j <= word2.size(); j++){ if(i == 0 || j == 0)dis[i][j] = 0; //子串为空,没有公共子序列 else { //状态转移:如果word1[i - 1] == word2[j - 1],相当于在两个子串后边加上相同的字符,公共子序列长度加一 //注意这里比较的是word1的第i个,下标就是i-1,和word2的第j个,下标就是j-1 //如果不相等,就由各加一个字符的两种情况下,最大值决定最长公共子序列 dis[i][j] = word1[i - 1] == word2[j - 1] ? dis[i - 1][j - 1] + 1 : max(dis[i - 1][j], dis[i][j - 1]); } } } int d = dis[word1.size()][word2.size()]; return word1.size() - d + word2.size() - d; }};
0 0
- 583. Delete Operation for Two Strings Medium
- 【Leetcode-Medium-583】Delete Operation for Two Strings
- 算法第12周Delete Operation for Two Strings[Medium]
- [LeetCode]583. Delete Operation for Two Strings
- 583. Delete Operation for Two Strings
- [leetcode] 583. Delete Operation for Two Strings
- 583. Delete Operation for Two Strings
- 583. Delete Operation for Two Strings
- [leetcode]583. Delete Operation for Two Strings
- leetcode 583. Delete Operation for Two Strings
- [LeetCode] 583. Delete Operation for Two Strings
- 583.Delete Operation for Two Strings
- Delete Operation for Two Strings
- LeetCode:M-583. Delete Operation for Two Strings
- #leetcode编程日记#583. Delete Operation for Two Strings
- [leetcode 583] Delete Operation for Two Strings
- leetcode583. Delete Operation for Two Strings
- 712[Medium]: Minimum ASCII Delete Sum for Two Strings
- 【图论】[luoguP1551]亲戚
- C++ Primer 第5版--练习11.13
- vue.js使用列表渲染的坑
- 利用关键代码段实现线程同步
- 【算法】母牛数目问题
- 583. Delete Operation for Two Strings Medium
- uWSGI+Nginx部署Flask项目
- java this对象
- Struts2默认对request进行了编码设置
- 使用TCP时序图解释BBR拥塞控制算法的几个细节
- KindEditor编辑器无法获得提交的数据
- 用两个栈实现一个队列——我作为面试官的小结
- PANDAS之RESAMPLE
- 学习curses图形库(三)