leetcode: Interleaving String

来源:互联网 发布:琪琪影院软件下载 编辑:程序博客网 时间:2024/06/06 01:16

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

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

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


class Solution {    public:    bool isInterleave(string s1, string s2, string s3) {                if (s1.size()+s2.size() != s3.size())            return false;                vector<vector<bool> > dp(s1.size()+1, vector<bool>(s2.size()+1));                for (int i=1; i<=s1.size(); i++)        {            for (int j=1; j<s2.size(); j++)            {                dp[i][j] = false;            }        }                /*         * remember, s1.size()+s2.size() == s3.size()        * so when both s1 and s2 is null, s3 is null too        * so dp[0][0] = true;        */        dp[0][0] = true;                // only s1 composes s3, s2 does not take part in        for (int i=1; i<=s1.size(); i++)        {            if (s1[i-1] == s3[i-1])                dp[i][0] = true;        }                // only s2 composes s3, s1 does not take part in        for (int j=1; j<=s2.size(); j++)        {            if (s2[j-1] == s3[j-1])                dp[0][j] = true;        }                for (int i=1; i<=s1.size(); i++)        {            for (int j=1; j<=s2.size(); j++)            {                if (dp[i-1][j]) // i-1 element in s1 and j element in s2 compose s3                {                    if (s1[i-1] == s3[i+j-1])                    {                        dp[i][j] = true;                        continue;                    }                }                                if (dp[i][j-1]) // i element in s1 and j-1 element in s2 compose s3                {                    if (s2[j-1] == s3[i+j-1])                    {                        dp[i][j] = true;                        continue;                    }                }            }        }                return dp[s1.size()][s2.size()];            }};


0 0
原创粉丝点击