[LeetCode]Interleaving String
2013-05-29 19:42
393 查看
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { //solution 1: DFS, it is straight forward every character in s3 //comes from either s1 or s2, but it is time-consuming //solution 2: DP. define f[i][j]: if s3(1, i+j) interleaved by s1(1,i) s2(1,j)? //(1)than the transform equation is below: //if s1[i] == s3[i+j], f[i][j] = f[i-1][j] //if s2[j] == s3[i+j], f[i][j] = f[i][j-1] //(2)the initialize is below : //f[0][0] = true, //f[i][0] = f[i-1][0] && (s1[i-1] == s3[i-1]); //f[0][j] = f[0][j-1] && (s2[j-1] == s3[j-1]); public: bool isInterleave(string s1, string s2, string s3) { // Start typing your C/C++ solution below // DO NOT write int main() function return DP(s1, s2, s3); } bool DP( string s1, string s2, string s3 ) { int n1 = s1.size(); int n2 = s2.size(); if(n1+n2 != s3.size()) return false; //init vector<vector<bool>> f(n1+1, vector<bool>(n2+1, false)); f[0][0] = true; for(int i = 1; i <= n1; ++i) f[i][0] = f[i-1][0] && (s1[i-1] == s3[i-1]); for(int j = 1; j <= n2; ++j) f[0][j] = f[0][j-1] && (s2[j-1] == s3[j-1]); //transform for (int i = 1; i <= n1; ++i) { for (int j = 1; j <= n2; ++j) { if(s1[i-1] == s3[i+j-1]) f[i][j] = f[i][j] || f[i-1][j]; if(s2[j-1] == s3[i+j-1]) f[i][j] = f[i][j] || f[i][j-1]; } } return f[n1][n2]; } };
second time
class Solution { public: bool isInterleave(string s1, string s2, string s3) { // Start typing your C/C++ solution below // DO NOT write int main() function int n1 = s1.size(); int n2 = s2.size(); if(n1+n2 != s3.size()) return false; vector<vector<bool> > f(n1+1, vector<bool>(n2+1, false)); f[0][0] = true; for(int i = 0; i <= n1; ++i) { for(int j = 0; j <= n2; ++j) { int len = i+j; if(i >= 1 && s1[i-1] == s3[len-1]) f[i][j] = f[i][j] || f[i-1][j]; if(j >= 1 && s2[j-1] == s3[len-1]) f[i][j] = f[i][j] || f[i][j-1]; } } return f[n1][n2]; } };
相关文章推荐
- [leetcode] 97.Interleaving String
- leetcode Interleaving String
- 【leetcode】Interleaving String
- leetcode-Interleaving String
- LeetCode:Interleaving String
- leetcode:Interleaving String 使用动态规划求解的java源代码
- leetcode: Interleaving String
- LeetCode 97 Interleaving String
- Leetcode:97. Interleaving String
- Interleaving String - LeetCode
- [Leetcode]@python 97. Interleaving String
- [LeetCode]Interleaving String
- LeetCode097 Interleaving String
- LEETCODE: Interleaving String
- LeetCode: Interleaving String
- [LeetCode] Interleaving String
- [Leetcode] #97 Interleaving String
- 【LeetCode】Interleaving String && CSDN 交替字符串
- leetcode: Interleaving String
- 【LeetCode】【97】Interleaving String