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.
dp 考虑s1 && s2 是否可以组合成s3
class Solution {
public:
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;
bool dp[len1+1][len2+1];
for(int i=0;i<=len1;i++){
for(int j=0;j<=len2;j++){
dp[i][j]=false;
}
}
dp[0][0]=true;
for(int i=1;i<=len1;i++){
if(s1[i-1]==s3[i-1]) dp[i][0]= true;
else break;
}
for(int i=1;i<=len2;i++){
if(s2[i-1]==s3[i-1]) dp[0][i]= true;
else break;
}
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
if(s3[i+j-1]==s1[i-1]) dp[i][j] |= dp[i-1][j];
if(s3[i+j-1]==s2[j-1]) dp[i][j] |= dp[i][j-1];
}
}
return dp[len1][len2];
}
};