题目描述
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/interleaving-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
白话题目:
算法:
详细解释关注 B站 【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB
C语言完全代码
bool isInterleave(char * s1, char * s2, char * s3){
int len1 = strlen(s1);
int len2 = strlen(s2);
int len3 = strlen(s3);
bool dp[128][128] = {false};
if (len1 + len2 != len3) {
return false;
}
dp[0][0] = true;
for (int i = 1; i <= len1; i++) {
if (s1[i - 1] == s3[i - 1] && dp[i - 1][0] == true)
dp[i][0] = true;
}
for (int j = 1; j <= len2; j++) {
if (s2[j - 1] == s3[j - 1] && dp[0][j - 1] == true)
dp[0][j] = true;
}
for (int m = 1; m <= len1; m++) {
for (int n = 1; n <= len2; n++) {
if (s1[m - 1] == s3[m + n -1] && dp[m - 1][n] == true)
dp[m][n] = true;
if (s2[n - 1] == s3[m + n -1] && dp[m][n - 1] == true)
dp[m][n] = true;
}
}
return dp[len1][len2];
}