class Solution
{
public:
bool isValid(string s1, string s2, string s3, string res, int i, int j, vector<vector<int>> &dp)
{
if (res == s3 && i == s1.length() && j == s2.length())
{
return true;
}
if (res.length() >= s3.length())
{
return false;
}
bool x = false, y = false;
if (i < s1.length())
{
x = isValid(s1, s2, s3, res + s1[i], i + 1, j, dp);
}
if (j < s2.length())
{
y = isValid(s1, s2, s3, res + s2[j], i, j + 1, dp);
}
bool ans = x || y;
return ans;
}
bool isInterleave(string s1, string s2, string s3)
{
int n = s1.length();
int m = s2.length();
vector<vector<int>> dp(n+1, vector<int>(m+1, -1));
if (isValid(s1, s2, s3, "", 0, 0, dp))
{
return true;
}
return false;
}
};