C/C++描述 LeetCode97. 交错字符串

C/C++描述 LeetCode97. 交错字符串

  大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客

本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!!


题目

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1s2 交错组成的。

示例 1:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true

示例 2:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false

题解

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        int len_1 = s1.length();
        int len_2 = s2.length();
        int len_3 = s3.length();
        // 长度不同
        if(len_1 + len_2 != len_3)
            return false;
        // 竖着为s1 横着为s2 形成一个网格,对网格进行搜索,只可以向右或者向下前进
        bool dp[1004][1004] = {false};
        dp[0][0] = true;
        // s1前面与s3重合的子串进行赋值
        for(int i = 1; i <= len_1 && s1[i-1]==s3[i-1]; i++)
            dp[i][0] = true;
        // s2前面与s3重合的子串进行赋值
        for(int i = 1; i <= len_2 && s2[i-1]==s3[i-1]; i++)
            dp[0][i] = true;
        // 对s1 s2进行搜索
        for(int i = 1; i <= len_1; i++){
            for(int j = 1; j <= len_2; j++){
                dp[i][j] = (dp[i-1][j] && s1[i-1] == s3[i+j-1]) | (dp[i][j-1] && s2[j-1] == s3[i+j-1]);
            }
        }
        return dp[len_1][len_2];
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43422111/article/details/107433954