-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsolution.js
More file actions
38 lines (33 loc) · 927 Bytes
/
Copy pathsolution.js
File metadata and controls
38 lines (33 loc) · 927 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* @param {string} s1
* @param {string} s2
* @param {string} s3
* @returns {boolean}
*/
class Solution {
isInterleave(s1, s2, s3) {
let n = s1.length,
m = s2.length;
if (n + m !== s3.length) return false;
// Ensure s2 is the shorter string for smaller dp array
if (m > n) {
[s1, s2] = [s2, s1];
[n, m] = [m, n];
}
const dp = new Array(m + 1).fill(false);
dp[0] = true;
// initialize using only s2
for (let j = 1; j <= m; ++j) {
dp[j] = dp[j - 1] && s2[j - 1] === s3[j - 1];
}
for (let i = 1; i <= n; ++i) {
dp[0] = dp[0] && s1[i - 1] === s3[i - 1];
for (let j = 1; j <= m; ++j) {
const takeFromS1 = dp[j] && s1[i - 1] === s3[i + j - 1];
const takeFromS2 = dp[j - 1] && s2[j - 1] === s3[i + j - 1];
dp[j] = takeFromS1 || takeFromS2;
}
}
return dp[m];
}
}