给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" 输出: true
示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc" 输出: false
示例 :
输入: s1 = "", s2 = "", s3 = "" 输出: true
示例 4:
输入: s1 = "abc", s2 = "", s3 = "abc" 输出: true
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
if(s1.size()+s2.size()!=s3.size())
return false;
vector<vector<bool>>dp(s1.size()+1,vector<bool>(s2.size()+1,false));
dp[0][0]=true;
for(int i=0;i<=s1.size();i++){
for(int j=0;j<=s2.size();j++){
if(i==0&&j==0)
dp[i][j]=true;
else if(i==0)
dp[i][j]=dp[i][j-1]&&s2[j-1]==s3[i+j-1];
else if(j==0)
dp[i][j]=(dp[i-1][j]&&s1[i-1]==s3[i+j-1]);
else
dp[i][j]=(dp[i-1][j]&&s1[i-1]==s3[i+j-1])||(dp[i][j-1]&&s2[j-1]==s3[i+j-1]);
// cout<<dp[i][j]<<endl;
}
}
return dp[s1.size()][s2.size()];
}
};