[leetcode] Interleaving String

来源:互联网 发布:数学系的学不学编程 编辑:程序博客网 时间:2024/04/18 18:53

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.

思路:dp,设立一个数组dp[0][0],dp[i][j],表示的是s3能被长度为i的s1和长度为j的s2交替迭代组成,那么当s3[i+j-1]=s1[i-1]的时候dp[i][j]=dp[i-1][j],当s3[i+j-1]=s2[j-1]的时候dp[i][j]=dp[i][j-1]

代码:

class Solution {public:    bool isInterleave(string s1, string s2, string s3) {        int len1=s1.size(),len2=s2.size(),len3=s3.size();        if(len1+len2!=len3) return false;        if(s1+s2==s3) return true;        bool dp[1000][1000];        dp[0][0]=true;        for(int i=1;i<=len1;i++){            dp[i][0]=(dp[i-1][0] && s3[i-1]==s1[i-1]);        }        for(int j=1;j<=len2;j++){            dp[0][j]=(dp[0][j-1] && s3[j-1]==s2[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+j-1]) || (dp[i][j-1] && s2[j-1]==s3[i+j-1]);            }        }        return dp[len1][len2];    }};


0 0
原创粉丝点击