Check if strings are interleaved

by Krishna Ananthi

JavaScript

var isInterleave = function(s1, s2, s3) {
       let m = s1.length, n = s2.length;
        if (m + n !== s3.length) return false;
        if (n < m) {
            [s1, s2] = [s2, s1];
            [m, n] = [n, m];
        }
        
        let dp = Array(n + 1).fill(false);
        dp[n] = true;
        for (let i = m; i >= 0; i--) {
            let nextDp = Array(n + 1).fill(false);
            nextDp[n] = true;
            for (let j = n; j >= 0; j--) {
                        let fromS1 = (i < m && s1[i] === s3[i + j] && dp[j]) ? "✅" : "❌";
            let fromS2 = (j < n && s2[j] === s3[i + j] && nextDp[j + 1]) ? "✅" : "❌";

                if (i < m && s1[i] === s3[i + j] && dp[j]) {
                    nextDp[j] = true;
                }
                if (j < n && s2[j] === s3[i + j] && nextDp[j + 1]) {
                    nextDp[j] = true;
                }
                console.log(`i=${i}, j=${j}, s1[i]=${s1[i] ?? '∅'}, s2[j]=${s2[j] ?? '∅'}, s3[i+j]=${s3[i+j]}, fromS1=${fromS1}, fromS2=${fromS2}, nextDp[${j}]=${nextDp[j]}`);
            }
            dp = nextDp;
        }
        return dp[0];
};


console.log(isInterleave("aaaa",  "bbbb", "aabbbbaa"))