97. 交错字符串

97. 交错字符串


题目链接:97. 交错字符串

代码如下:

//动态规划 跟62 不同路径思想类似
//参考:https://leetcode.cn/problems/interleaving-string/solutions/335561/lei-si-lu-jing-wen-ti-zhao-zhun-zhuang-tai-fang-ch
class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        if(s1.size()+s2.size()!=s3.size())  return false;

        //dp[i,j]表示s1前i字符能与s2前j字符组成s3前i+j个字符
        vector<vector<bool>> dp(s1.size()+1,vector<bool>(s2.size()+1,false));
        dp[0][0]=true;
        for(int i=1;i<=s1.size()&&s1[i-1]==s3[i-1];i++)
            dp[i][0]=true;
        for(int j=1;j<=s2.size()&&s2[j-1]==s3[j-1];j++)
            dp[0][j]=true;
        for(int i=1;i<=s1.size();i++)
        {
            for(int j=1;j<=s2.size();j++)
            {
                dp[i][j]=(dp[i-1][j]&&s3[i+j-1]==s1[i-1])
                    ||(dp[i][j-1]&&s3[i+j-1]==s2[j-1]);

            }
        }

        return dp[s1.size()][s2.size()];
    }
};

你可能感兴趣的:(leetcode,c++)