Interleaving String

MediumStringDynamic Programming

Solution

export function isInterleave(s1: string, s2: string, s3: string): boolean {
  const [n, m, k] = [s1.length, s2.length, s3.length];
  if (n + m !== k) {
    return false;
  }
  let prevRow = new Array(s2.length).fill(false);
 
  for (let i = 0; i < n + 1; i++) {
    const currentRow: boolean[] = [];
    let prevValue = false;
    for (let j = 0; j < m + 1; j++) {
      prevValue =
        (i === 0 && j === 0) ||
        (prevRow[j] && s3[i + j - 1] === s1[i - 1]) ||
        (prevValue && s3[i + j - 1] === s2[j - 1]);
      currentRow.push(prevValue);
    }
    prevRow = currentRow;
  }
 
  return prevRow[m];
}