[leetcode] Interleaving String@DP
来源:互联网 发布:echo linux 命令@echo 编辑:程序博客网 时间:2024/05/01 16:12
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 = "aabcc"
,
s2 = "dbbca"
,
When s3 = "aadbbcbcac"
, return true.
When s3 = "aadbbbaccc"
, return false.
首先说一下这个interleaving的意思,这个单词的意思就是s3是否能通过s1和s2交织得到,s1,s2中字符的相对顺序是不能被打乱的。
递归的解法如下:
class Solution {public: bool isInterleave(string s1, string s2, string s3) {// Start typing your C/C++ solution below// DO NOT write int main() function return _isInterleave(s1,s2,s3);}bool _isInterleave(string s1,string s2,string s3){int length1=s1.size();int length2=s2.size();int length3=s3.size();if(length1+length2!=length3)return false;if(s3=="")return s1==""&&s2=="";if(s1=="" && s2=="")return s3=="";if(s1=="")return s2==s3;if(s2=="")return s1==s3;string s11(s1.begin()+1,s1.end());string s21(s2.begin()+1,s2.end());string s31(s3.begin()+1,s3.end());if(s1[0]==s3[0] && s2[0]!=s3[0])return _isInterleave(s11,s2,s31);else if(s1[0]!=s3[0] && s2[0]==s3[0])return _isInterleave(s1,s21,s31);else if(s1[0]==s3[0] && s2[0]==s2[0])return _isInterleave(s11,s2,s31)||_isInterleave(s1,s21,s31);elsereturn false;}};
非递归的解法如下:
class Solution {private:public:bool isInterleave(string s1, string s2, string s3) {// Start typing your C/C++ solution below// DO NOT write int main() functionint length1=s1.size();int length2=s2.size();int length3=s3.size();if (length1 + length2 != length3)return false;bool (*f)[1000]=new bool[s1.size()+1][1000];f[0][0] = true;for(int i = 1; i <= length1; i++)f[i][0] = f[i-1][0] && (s3[i-1] == s1[i-1]);for(int j = 1; j <= length2; j++)f[0][j] = f[0][j-1] && (s3[j-1] == s2[j-1]);for(int i = 1; i <= length1; i++)for(int j = 1; j <= length2; j++)f[i][j] = (f[i][j-1] && s2[j-1] == s3[i+j-1]) || (f[i-1][j] && s1[i-1] == s3[i+j-1]);return f[length1][length2];}};
- [leetcode] Interleaving String@DP
- Leetcode dp Interleaving String
- Interleaving String [leetcode] DP
- [LeetCode.DP]Interleaving String
- LeetCode Interleaving String DP
- leetcode---interleaving-string---dp
- leetcode : Interleaving String(DFS 和 DP)
- leetcode -- Interleaving String -- 2D dp经典
- Leetcode 97 - Interleaving String(dp)
- 【DP】Interleaving String
- Interleaving String(DP应用)
- leetcode: 97. Interleaving String 递归与DP两种算法
- LeetCode-97-Interleaving String DP 记忆化搜索
- LeetCode: Interleaving String
- LeetCode Interleaving String
- LeetCode: Interleaving String
- [Leetcode] Interleaving String
- [LeetCode] Interleaving String
- 查找svn文件所在路径
- 【iOS-Cocos2d游戏开发之四】独自收集Cocos2d提供的字体!共57种(有对照的字体图)
- A. Pythagorean Theorem II
- HDU-1027-全排列
- HDU 2147kiki's game
- [leetcode] Interleaving String@DP
- FleaPHP和ThinkPHP的选择和比较
- 【黑马程序员】8. JavaScript
- poj 2479 Maximum sum && poj 2593 Max Sequence
- POJ 2488 A Knight's Journey
- android 之 handler
- SQL Server 索引结构及其使用
- emacs 快捷键操作
- MyEclipse Java Build Path详解