leetcode97——Interleaving String

题目大意:给出三个字符串,问第三个可否由前两个字符串组成,要求在第三个字符串中的字符顺序较原字符串而言不能改变

分析:动规。递归超时,选择动规。两个字符串可以作为一个二维地图,我们需要做的就是判断能否从左上角走到右下角。

          向右走就是s2的这位去匹配s3的当前位,向下走就是s1的这位匹配s3的当前位。

            

代码:

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        int m = s1.size();
        int n = s2.size();
        if((m + n) != s3.size()) return false;
        vector<vector<bool>> dp(m+1,vector<bool>(n+1,false));
        dp[0][0] = true;
        for(int j = 1;j <= n;j++){
            if(s2[j - 1] == s3[j - 1])
                dp[0][j] = true;
            else break;
        }
        for(int i = 1;i <= m;i++){
            if(s1[i - 1] == s3[i - 1])
                dp[i][0] = true;
            else break;
        }
        for(int i = 1;i <= m;i++){
            for(int j = 1;j <= n;j++){
                if(dp[i - 1][j] && s1[i - 1] == s3[i + j - 1] || dp[i][j - 1] && s2[j - 1] == s3[i + j - 1])
                    dp[i][j] = true;
            }
        }
        return dp[m][n];
    }
};

猜你喜欢

转载自blog.csdn.net/tzyshiwolaogongya/article/details/80785108