力扣 -- 97. 交错字符串

力扣 -- 97. 交错字符串_第1张图片

解题步骤:

力扣 -- 97. 交错字符串_第2张图片

力扣 -- 97. 交错字符串_第3张图片

力扣 -- 97. 交错字符串_第4张图片

力扣 -- 97. 交错字符串_第5张图片

力扣 -- 97. 交错字符串_第6张图片

参考代码:

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        int m=s1.size();
        int n=s2.size();
        //先判断s1的长度+s2的长度是否等于s3的长度,如果不等,则s1和s2不可能拼接成s3
        if(m+n!=s3.size())
        {
            return false;
        }
        //处理下标映射关系
        s1=' '+s1;
        s2=' '+s2;
        s3=' '+s3;
        vector> dp(m+1,vector(n+1));
        //初始化第一行
        dp[0][0]=true;
        for(size_t j=1;j<=n;j++)
        {
            if(s2[j]==s3[j])
            {
                dp[0][j]=true;
            }
            else
            {
                break;
            }
        }
        //初始化第一列
        for(size_t i=1;i<=m;i++)
        {
            if(s1[i]==s3[i])
            {
                dp[i][0]=true;
            }
            else
            {
                break;
            }
        }

        //填表
        //参考状态转移方程
        for(size_t i=1;i<=m;i++)
        {
            for(size_t j=1;j<=n;j++)
            {
                if(s1[i]==s3[i+j]&&dp[i-1][j])
                {
                    dp[i][j]=true;
                }
                else if(s2[j]==s3[i+j]&&dp[i][j-1])
                {
                    dp[i][j]=true;
                }
            }
        }

        //返回值
        return dp[m][n];
    }
};

你学会了吗???

你可能感兴趣的:(力扣经典面试题,力扣动态规划,leetcode,算法,职场和发展,c++,c语言,数据结构,动态规划)