学渣带你刷Leetcode0097交错字符串

题目描述

给定三个字符串 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];
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章