Interleaving String

来源:互联网 发布:迅雷 mac safari提示 编辑:程序博客网 时间:2024/06/08 03:24

Given s1, s2, s3, find whether s3 is formed by the interleaving ofs1 and s2.

For example,
Given:
s1 = "aabcc",
s2 = "dbbca",

When s3 = "aadbbcbcac", return true.
When s3 = "aadbbbaccc", return false.


Solution:

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


0 0
原创粉丝点击