LintCode 29 给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。

class Solution {
public:
    /**
     * @param s1: A string
     * @param s2: A string
     * @param s3: A string
     * @return: Determine whether s3 is formed by interleaving of s1 and s2
     */
    bool isInterleave(string &s1, string &s2, string &s3) {
        // write your code here
        if(s1.size()+s2.size()!=s3.size()) return false;
        if(s1==""&&s2==""&&s3=="") return true;
        vector> dp(s3.size()+1,vector(s3.size()+1));
       dp[1][0]=s2[0]==s3[0];
       dp[1][1]=s1[0]==s3[0];
        for(int i=2;i<=s3.size();i++){
            for(int j=0;j<=i;j++){
                dp[i][j]=false;
                if(j-1>=0&&s1[j-1]==s3[i-1]&&dp[i-1][j-1]==true) dp[i][j]=true;
                if(i-j-1>=0&&s2[i-j-1]==s3[i-1]&&dp[i-1][j]==true) dp[i][j]=true;
            }
        }
        return dp[s3.size()][s1.size()];
    }
};

你可能感兴趣的:(LintCode 29 给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。)