输入三个字符串s1、s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成,即不改变s1和s2中各个字符原有的相对顺序,例如当s1 = “aabcc”,s2 = “dbbca”,s3 = “aadbbcbcac”时,则输出true,但如果s3=“accabdbbca”,则输出false。
#define N 100
bool isInterLeave(string a, string b, string mixedStr) {
int alen = a.length();
int blen = b.length();
int mixlen = mixedStr.length();
if (alen + blen != mixlen) {
return false;
}
bool dp[N][N];
memset(dp, false, sizeof(bool) * N * N);
//空串可以合成空串
dp[0][0] = true;
for (int i = 0; i <= alen; ++i) {
for (int j = 0; j <= blen; ++j) {
if (dp[i][j]
|| (i - 1 >= 0 && dp[i - 1][j]
&& a[i - 1] == mixedStr[i + j - 1])
|| (j - 1 >= 0 && dp[i][j - 1]
&& b[j - 1] == mixedStr[i + j - 1])) {
dp[i][j] = true;
} else {
dp[i][j] = false;
}
}
}
return dp[alen][blen];
}