File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {string } s1
3
+ * @param {string } s2
4
+ * @param {string } s3
5
+ * @return {boolean }
6
+ */
7
+ function isInterleave ( s1 , s2 , s3 ) {
8
+
9
+ const l1 = s1 . length ;
10
+ const l2 = s2 . length ;
11
+ const l3 = s3 . length ;
12
+
13
+ if ( l1 + l2 !== l3 ) {
14
+ return false ;
15
+ }
16
+ if ( ! s1 || ! s2 || ! s3 ) {
17
+ return ( ! s1 && ! s2 && ! s3 ) || (
18
+ s1
19
+ ? s1 === s3
20
+ : s2 === s3
21
+ ) ;
22
+ }
23
+
24
+ const seen = new Array ( l1 + 1 ) . fill ( )
25
+ . map ( ( ) => new Array ( l2 + 1 ) ) ;
26
+ return checkStrings ( ) ;
27
+
28
+ /**
29
+ * @param {number= } i = `0`
30
+ * @param {number= } j = `0`
31
+ * @param {number= } k = `0`
32
+ * @return {boolean }
33
+ */
34
+ function checkStrings ( i = 0 , j = 0 , k = 0 ) {
35
+ return k === l3 || (
36
+ seen [ i ] [ j ] !== undefined
37
+ ? seen [ i ] [ j ]
38
+ : seen [ i ] [ j ] = (
39
+ i < l1
40
+ && s1 [ i ] === s3 [ k ]
41
+ && checkStrings ( i + 1 , j , k + 1 )
42
+ ) || (
43
+ j < l2
44
+ && s2 [ j ] === s3 [ k ]
45
+ && checkStrings ( i , j + 1 , k + 1 )
46
+ )
47
+ ) ;
48
+ }
49
+ }
You can’t perform that action at this time.
0 commit comments