97. Interleaving String
2016-11-07 21:29
239 查看
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.
第一种方法:递归回溯,但是超时了
第二种方法:动态规划,二维动态规划
s1, s2只有两个字符串,因此可以展平为一个二维地图,判断是否能从左上角走到右下角。
当s1到达第i个元素,s2到达第j个元素:
地图上往右一步就是s2[j-1]匹配s3[i+j-1]。
地图上往下一步就是s1[i-1]匹配s3[i+j-1]。
示例:s1=”aa”,s2=”ab”,s3=”aaba”。标1的为可行。最终返回右下角。
0 a b
0 1 1 0
a 1 1 1
a 1 0 1
For example,
Given:
s1 = “aabcc”,
s2 = “dbbca”,
When s3 = “aadbbcbcac”, return true.
When s3 = “aadbbbaccc”, return false.
第一种方法:递归回溯,但是超时了
class Solution { public: bool isInterleave(string s1, string s2, string s3) { if(s1.size()==0) return s2==s3; if(s2.size()==0) return s1==s3; if(s3.size()==0) return s1.size()+s2.size()==0; if(s1[0]!=s3[0]&&s2[0]!=s3[0]) return false; else if(s1[0]==s3[0]&&s2[0]!=s3[0]) return isInterleave(s1.substr(1),s2,s3.substr(1)); else if(s1[0]!=s3[0]&&s2[0]==s3[0]) return isInterleave(s1,s2.substr(1),s3.substr(1)); else return isInterleave(s1,s2.substr(1),s3.substr(1))||isInterleave(s1.substr(1),s2,s3.substr(1)); } };
第二种方法:动态规划,二维动态规划
s1, s2只有两个字符串,因此可以展平为一个二维地图,判断是否能从左上角走到右下角。
当s1到达第i个元素,s2到达第j个元素:
地图上往右一步就是s2[j-1]匹配s3[i+j-1]。
地图上往下一步就是s1[i-1]匹配s3[i+j-1]。
示例:s1=”aa”,s2=”ab”,s3=”aaba”。标1的为可行。最终返回右下角。
0 a b
0 1 1 0
a 1 1 1
a 1 0 1
class Solution { public: bool isInterleave(string s1, string s2, string s3) { int m=s1.size(); int n=s2.size(); if(m+n!=s3.size()) return false; vector<vector<bool> >ret(m+1,vector<bool>(n+1,false)); ret[0][0]=true; int i,j; for(i=1;i<=m;i++) ret[i][0]=ret[i-1][0]&&(s1[i-1]==s3[i-1]); for(j=1;j<=n;j++) ret[0][j]=ret[0][j-1]&&(s2[j-1]==s3[j-1]); for(i=1;i<=m;i++) for(j=1;j<=n;j++) { ret[i][j]=(ret[i-1][j]&&(s1[i-1]==s3[i+j-1]))||(ret[i][j-1]&&(s2[j-1]==s3[i+j-1])); } return ret[m] ; } };
相关文章推荐
- 97 Interleaving String
- [LeetCode 97] Interleaving String(Python)
- leetcode_question_97 Interleaving String
- 97. Interleaving String
- 97. Interleaving String
- 97. Interleaving String
- 97. Interleaving String
- 97. Interleaving String
- LeetCode 97 Interleaving String
- 97.Interleaving String
- leetcode_[python/C++]_97_Interleaving String_动态规划
- Leetcode 97, Interleaving String
- leetcode 97: Interleaving String
- Leetcode 97 Interleaving String
- [leetcode-97]Interleaving String(java)
- [leetcode 97]Interleaving String
- 97. Interleaving String
- [leetcode] 97 Interleaving String
- LeetCode-97-Interleaving String DP 记忆化搜索
- 【LeetCode】【97】Interleaving String