给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false
链接:🔗
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int m = s1.size();
int n = s2.size();
if (m + n != s3.size()) return false;
s1 = ' ' + s1;
s2 = ' ' + s2;
s3 = ' ' + s3;
vector<vector<bool>> f(m + 1,vector<bool>(n + 1));
f[0][0] = true; // 由于s1,s2,s3的下标0的位置都是空格,因此f[0][0] = true
for (int i = 0; i <= m; ++i)
for (int j = 0; j <= n ; ++j){
if (i && s1[i] == s3[i + j]){
f[i][j] = f[i - 1][j];
}
if (j && s2[j] == s3[i + j]){
f[i][j] = f[i][j] || f[i][j - 1];
}
}
return f[m][n];
}
};