9
9
* @return {number }
10
10
*/
11
11
var maximumRemovals1 = function ( s , p , removable ) {
12
+ let k = 0 ;
13
+ // removable.reverse();
14
+ s = s . split ( '' ) ;
15
+ p = p . split ( '' ) ;
12
16
13
- let k = 0 ;
14
- // removable.reverse();
15
- s = s . split ( '' ) ;
16
- p = p . split ( '' ) ;
17
- for ( let i = 0 ; i < removable . length ; i ++ ) {
18
- s [ removable [ i ] ] = - 1 ;
19
- if ( isSubSet ( ) ) {
20
- k ++ ;
21
- } else {
22
- return k ;
23
- }
17
+ for ( let i = 0 ; i < removable . length ; i ++ ) {
18
+ s [ removable [ i ] ] = - 1 ;
19
+ if ( isSubSet1 ( s , p ) ) {
20
+ k ++ ;
21
+ } else {
22
+ return k ;
24
23
}
24
+ }
25
+
26
+ return k ;
27
+ } ;
25
28
26
- function isSubSet ( ) {
27
- let i = 0 ;
28
- let j = 0 ;
29
+ // helper function.
30
+ function isSubSet1 ( s , p ) {
31
+ let i = 0 ;
32
+ let j = 0 ;
29
33
30
- while ( i < s . length && j < p . length ) {
31
- if ( s [ i ] === p [ j ] ) {
32
- i ++ ;
33
- j ++ ;
34
- } else {
35
- i ++ ;
36
- }
37
- }
38
- return j === p . length
34
+ while ( i < s . length && j < p . length ) {
35
+ if ( s [ i ] === p [ j ] ) {
36
+ i ++ ;
37
+ j ++ ;
38
+ } else {
39
+ i ++ ;
40
+ }
39
41
}
40
42
41
- return k ;
42
- } ;
43
+ return j === p . length ;
44
+ }
43
45
44
46
45
47
/**
@@ -53,37 +55,42 @@ var maximumRemovals1 = function(s, p, removable) {
53
55
* @return {number }
54
56
*/
55
57
var maximumRemovals = function ( s , p , removable ) {
58
+ s = s . split ( '' ) ;
59
+ p = p . split ( '' ) ;
60
+ let left = 0 ;
61
+ let right = removable . length - 1 ;
62
+ let k = 0 ;
56
63
57
- s = s . split ( '' ) ;
58
- p = p . split ( '' ) ;
59
- let left = 0 ;
60
- let right = removable . length - 1 ;
61
- let k = 0 ;
62
- while ( left <= right ) {
63
- const mid = Math . floor ( ( left + right ) / 2 ) ;
64
- const hash = new Set ( removable . slice ( 0 , mid + 1 ) ) ;
65
- if ( isSubSet ( hash ) ) {
66
- k = Math . max ( k , mid + 1 ) ;
67
- left = mid + 1 ;
68
- } else {
69
- right = mid - 1 ;
70
- }
71
- }
64
+ while ( left <= right ) {
65
+ const mid = Math . floor ( ( left + right ) / 2 ) ;
66
+ const hash = new Set ( removable . slice ( 0 , mid + 1 ) ) ;
72
67
73
- function isSubSet ( hash ) {
74
- let i = 0 ;
75
- let j = 0 ;
68
+ if ( isSubSet ( hash , s , p ) ) {
69
+ k = Math . max ( k , mid + 1 ) ;
70
+ left = mid + 1 ;
71
+ continue ;
72
+ }
76
73
77
- while ( i < s . length && j < p . length ) {
78
- if ( s [ i ] === p [ j ] && ! hash . has ( i ) ) {
79
- i ++ ;
80
- j ++ ;
81
- } else {
82
- i ++ ;
83
- }
84
- }
85
- return j === p . length
74
+ right = mid - 1 ;
86
75
}
87
76
88
- return k ;
77
+ return k ;
89
78
} ;
79
+
80
+ // helper function.
81
+ function isSubSet ( hash , s , p ) {
82
+ let i = 0 ;
83
+ let j = 0 ;
84
+
85
+ while ( i < s . length && j < p . length ) {
86
+ if ( s [ i ] === p [ j ] && ! hash . has ( i ) ) {
87
+ i ++ ;
88
+ j ++ ;
89
+ continue ;
90
+ }
91
+
92
+ i ++ ;
93
+ }
94
+
95
+ return j === p . length ;
96
+ }
0 commit comments