Interleaving String
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.
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int n1 = s1.size();
int n2 = s2.size();
int n3 = s3.size();
if(n1 + n2 != n3)
return false;
vector<vector<int>> dp(n1 + 1, vector<int>(n2 + 1, 1));
//dp[i][j] represent s1[0, ..., i - 1] s2[0, ..., j - 1]can froms3[0, 1, ,,,i+j -1]
for(int i = 0; i <= n1; i++){
for(int j = 0; j <= n2;j++){
//重要
if(i == 0 && j == 0)
dp[i][j] = 1;
else if(s1[i - 1] == s3[i + j - 1] && (i - 1 >= 0) && dp[i - 1][j]
||s2[j - 1] == s3[i + j - 1] && (j - 1 >= 0) && dp[i][j - 1]){
dp[i][j] = 1;
}else{
dp[i][j] = 0;
}
}
}
return dp[n1][n2];
}
};