題目描述
給定三個字符串 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];
}