leetcode Interleaving String

来源:互联网 发布:java认证有用吗 编辑:程序博客网 时间:2024/05/22 13:15
class Solution {public:    bool isInterleave(string s1, string s2, string s3) {        int len1 = s1.length(), len2 = s2.length(), len3 = s3.length();        if(len3 != len1 + len2){            return false;        }        if(len1 == 0){            return s2 == s3;        }        if(len2 == 0){            return s1 == s3;        }        vector<vector<int> >dp;        dp.resize(len2 + 1);        for(int i = 0; i <= len2; ++i){            dp[i].resize(len3 + 1, 0);        }        dp[0][0] = 1;        dp[1][1] = s2[0] == s3[0];        dp[0][1] = s1[0] == s3[0];        int leftlen1;        for(int i = 2; i <= len3; ++i){            //j == 0, completely match str1            leftlen1 = i;            if(i <= len1){                if(s3[i - 1] == s1[leftlen1 - 1]){                    dp[0][i] |= dp[0][i - 1];                }            }            for(int j = 1; j <= min(i, len2); ++j){                if(s3[i - 1] == s2[j - 1]){                    dp[j][i] = dp[j - 1][i - 1];                }                leftlen1 = i - j;                if(leftlen1 == 0 || leftlen1 > len1){                    continue;                }                if(s3[i - 1] == s1[leftlen1 - 1]){                    dp[j][i] |= dp[j][i - 1];                }            }         }        return dp[len2][len3];    }};
0 0
原创粉丝点击