leetcode: Interleaving String
来源:互联网 发布:学好java的心得 编辑:程序博客网 时间:2024/06/06 12:52
动态规划可解:状态转换方程:dp[i][j] = ( dp[i-1][j] && ( s1[i-1] == s3[i+j-1])) || ( dp[i][j-1] && ( s2[j-1] == s3[i+j-1]))
也就是从后往前推 interleaving(s1, s2, s3, len1, len2, len3) =( s1.lastchar == s3.lastchar && interleaving( s1, s2, s3, len1-1, len2, len3-1)) || ( s2.lastchar == s3.lastchar && interleaving( s1, s2, s3, len1, len2-1, len3-1))
其中len3=len1+len2,所以说len3由两个变量决定,需要用二维数组
class Solution {public: bool isInterleave(string s1, string s2, string s3) { if( s1.size() + s2.size() != s3.size()) return false; bool **dp = new bool *[s1.size()+1];//这里必须+1 for( int i = 0; i <= s1.size(); ++i){ dp[i] = new bool[s2.size()+1];//这里必须+1 } dp[0][0] = true; for( int i = 1; i <= s1.size(); ++i){ dp[i][0] = dp[i-1][0] && ( s3[i-1] == s1[i-1]); } for( int j = 1; j <= s2.size(); ++j){ dp[0][j] = dp[0][j-1] && ( s3[j-1] == s2[j-1]); } for( int i = 1; i <= s1.size(); ++i){ for( int j = 1; j <= s2.size(); ++j){ dp[i][j] = ( dp[i-1][j] && ( s1[i-1] == s3[i+j-1])) || ( dp[i][j-1] && ( s2[j-1] == s3[i+j-1])); } } return dp[s1.size()][s2.size()]; }};
0 0
- LeetCode: Interleaving String
- LeetCode Interleaving String
- LeetCode: Interleaving String
- [Leetcode] Interleaving String
- [LeetCode] Interleaving String
- leetcode 68: Interleaving String
- [Leetcode] Interleaving String
- LeetCode - Interleaving String
- [LeetCode]Interleaving String
- LeetCode: Interleaving String
- Leetcode: Interleaving String
- [Leetcode]Interleaving String
- Leetcode: Interleaving String
- LeetCode:Interleaving String
- LeetCode-Interleaving String
- [leetcode] Interleaving String@DP
- LeetCode:Interleaving String
- LeetCode - Interleaving String
- 我的大学,我的梦想
- WinCE 的发展史及相关基础知识
- ZOJ 3795 Grouping 缩点拓扑序下求最长链
- poj3311 经典tsp问题
- 【数据结构】给出一个链表,遍历一次就找到中间节点
- leetcode: Interleaving String
- 铁路栈问题
- 算法题 1 判断两条单链表是否交叉 一百度实习笔试题(2012.5.6)
- 九度 题目1052:找x
- DataGridView控件绑定数据源
- Name Count -- Javascript 实现
- Qt 资源网站
- 体验格式控制的输出
- L和_T