[leetcode] Interleaving String@DP
2013-08-19 10:00
369 查看
Given s1, s2, s3,
find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 =
s2 =
When s3 =
return true.
When s3 =
return false.
首先说一下这个interleaving的意思,这个单词的意思就是s3是否能通过s1和s2交织得到,s1,s2中字符的相对顺序是不能被打乱的。
递归的解法如下:
非递归的解法如下:
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); else return 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() function int 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
- LeetCode Interleaving String DP
- [LeetCode.DP]Interleaving String
- LeetCode-97-Interleaving String DP 记忆化搜索
- leetcode 97. Interleaving String(字符串交错出现) DFS深度优先遍历 + 很明显很经典的DP动态规划做法
- leetcode -- Interleaving String -- 2D dp经典
- Interleaving String [leetcode] DP
- 105_leetcode_interleaving string
- LeetCode - Interleaving String 题解
- LeetCode Interleaving String
- Interleaving String (leetcode)
- LeetCode - Interleaving String
- LeetCode:Interleaving String
- LeetCode:Interleaving String
- leetcode Interleaving String
- leetcode:Interleaving String
- LeetCode_Interleaving String
- [LeetCode] Interleaving String
- 【LeetCode with Python】 Interleaving String