Interleaving String

Given s1, s2, s3, 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) {
        int n1 = s1.size();
        int n2 = s2.size();
        int n3 = s3.size();

        if(n1 + n2 != n3)
            return false;
        vector<vector<int>> dp(n1 + 1, vector<int>(n2 + 1, 1));
        //dp[i][j] represent s1[0, ..., i - 1] s2[0, ..., j - 1]can froms3[0, 1, ,,,i+j -1]

        for(int i = 0; i <= n1; i++){
            for(int j = 0; j <= n2;j++){
                //重要
                if(i == 0 && j == 0) 
                    dp[i][j] = 1;
                else if(s1[i - 1] == s3[i + j - 1] && (i - 1 >= 0) && dp[i - 1][j] 
                 ||s2[j - 1] == s3[i + j - 1] && (j - 1 >= 0) && dp[i][j - 1]){
                     dp[i][j] = 1;
                 }else{
                     dp[i][j] = 0;
                 }
            }
        }
        return dp[n1][n2];
    }
};

results matching ""

    No results matching ""