题意: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) {
if(s1.size() + s2.size() != s3.size()) return false;
int sLen1 = s1.size();
int sLen2 = s2.size();
vector<vector<char> > isInter(sLen1+1, vector<char>(sLen2+1, 0));
//isInter[i][j] = 1代表s1前i个字符与s2前j个字符能组成s3前i+j个字符
for(int i = 0;i <= sLen1;i++) {
for(int j = 0;j <= sLen2;j++) {
if(i == 0 && j == 0) {
isInter[i][j] = 1;
continue;
}
isInter[i][j] = (i >= 1 && isInter[i-1][j] && s1[i-1] == s3[i+j-1]) || (j >= 1 && isInter[i][j-1] && s2[j-1] == s3[i+j-1]);
//要使inter[i][j] = 1,s3的第i+j个字符必定是s1[i-1]或者是s2[j-1]
}
}
return isInter[sLen1][sLen2];
}
};