给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。
比如 s1 = "aabcc" s2 = "dbbca"
- 当 s3 = "aadbbcbcac",返回 true.
- 当 s3 = "aadbbbaccc", 返回 false.
class Solution {
public:
/*
* @param s1: A string
* @param s2: A string
* @param s3: A string
* @return: Determine whether s3 is formed by interleaving of s1 and s2
*/
bool isInterleave(string &s1, string &s2, string &s3) {
// write your code here
if(s1.size()==0&&s2.size()==0&&s3.size()!=0){
return false;
}
int a[256];
for(int i=0;i<256;i++){
a[i]=0;
}
for(int i=0;i<s3.size();i++){
a[s3[i]]++;
}
for(int i=0;i<s2.size();i++){
a[s2[i]]--;
if(a[s2[i]]<0){
return false;
}
}
for(int i=0;i<s1.size();i++){
a[s1[i]]--;
if(a[s1[i]]<0){
return false;
}
}
int sum=0;
for(int i=0;i<s3.size();i++){
if(s1[sum]==s3[i]){
sum++;
}
}
if(sum!=s1.size()){
return false;
}
sum=0;
for(int i=0;i<s3.size();i++){
if(s2[sum]==s3[i]){
sum++;
}
}
if(sum!=s2.size()){
return false;
}
return true;
}
};