给定s1,s2,s3,发现是否通过s1和s2的交错形成s3。

来源:互联网 发布:什么商品淘宝禁止出售 编辑:程序博客网 时间:2024/05/23 16:54

本题源自LeetCode

-------------------------------------------------------------------

例如

s1 ="aabcc",
s2 ="dbbca",

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

-------------------------------------------------------------------------------------

转自大佬的思路:动态规划。http://www.jianshu.com/p/1e991930e44f

自己做了实现:

    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));        dp[0][0]=true;        for(int i=1;i<=len1;i++){            dp[i][0]=dp[i-1][0]&&s1[i-1]==s3[i-1];        }        for(int j=1;j<=len2;j++)            dp[0][j]=dp[0][j-1]&&s2[j-1]==s3[j-1];                for(int i=1;i<=len1;i++){            for(int j=1;j<=len2;j++){                dp[i][j]=dp[i-1][j]&&s1[i-1]==s3[i-1+j] || dp[i][j-1]&&s2[j-1]==s3[i+j-1];            }        }        return dp[len1][len2];    }


阅读全文
0 0