leetcode_97.交错字符串

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

示例 1:

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

示例 2:

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

解析:使用动态规划的方法。
定义二维数组dp[i+1][j+1],其中i,j代表两个字符串的长度
其中dp[a][b]代表s1的前a-1个字符和s2的b-1个字符是否能够交错组成s3的前a+b-1个字符

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        if(s1.size()+s2.size()!=s3.size()) return false;
        vector<vector<int>> dp(s1.size()+1,vector<int>(s2.size()+1,0));
        for(int i=0;i<=s1.size();++i){
            for(int j=0;j<=s2.size();++j){
                if(i==0&&j==0) dp[0][0]=1;
                else if(i==0) dp[0][j] = dp[0][j-1] && s2[j-1]==s3[j-1];
                else if(j==0) dp[i][0] = dp[i-1][0] && s1[i-1]==s3[i-1];
                else dp[i][j] = (dp[i][j-1]&&s2[j-1]==s3[i+j-1])||(dp[i-1][j]&&s1[i-1]==s3[i+j-1]);
            }
        }
        return dp[s1.size()][s2.size()];
    }
};
发布了112 篇原创文章 · 获赞 0 · 访问量 354

猜你喜欢

转载自blog.csdn.net/qq_37292201/article/details/103923039