class Solution{
public:
bool interLeave(string s1,int len1,string s2,int len2,string s3,int len3){
bool flag=false;
if(len3==0){
if(len1==0&&len2==0)
return true;
else
return false;
}
if(len3>=1&&len1>=1&&s3[len3-1]==s1[len1-1]){
flag=flag||interLeave(s1,len1-1,s2,len2,s3,len3-1);
}
if(len3>=1&&len2>=1&&s3[len3-1]==s2[len2-1]){
flag=flag||interLeave(s1,len1,s2,len2-1,s3,len3-1);
}
return flag;
}
bool isInterleave(string s1, string s2, string s3){
int len1=s1.length();
int len2=s2.length();
int len3=s3.length();
if(len3!=(len1+len2))
return false;
//cout<<interLeave("ab",2,"aa",2,"abaa",4);
return interLeave(s1,len1,s2,len2,s3,len3);
}
};
初始想法,删除其中一个字符串,看剩下的是否是字符串2。遇到分支时,无法判断该删哪个,需要回溯,因此递归,二维动态规划。