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