File tree 1 file changed +89
-0
lines changed
1 file changed +89
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * https://leetcode.com/problems/maximum-number-of-removable-characters/
3
+ *
4
+ * Brute force
5
+ * Time O(removable.length * s.length) | Space O(1)
6
+ * @param {string } s
7
+ * @param {string } p
8
+ * @param {number[] } removable
9
+ * @return {number }
10
+ */
11
+ var maximumRemovals1 = function ( s , p , removable ) {
12
+
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
+ }
24
+ }
25
+
26
+ function isSubSet ( ) {
27
+ let i = 0 ;
28
+ let j = 0 ;
29
+
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
39
+ }
40
+
41
+ return k ;
42
+ } ;
43
+
44
+
45
+ /**
46
+ *
47
+ * Binary Search
48
+ * n = length of string, k = length of removable
49
+ * Time O(log(k)*n) | Space O(k)
50
+ * @param {string } s
51
+ * @param {string } p
52
+ * @param {number[] } removable
53
+ * @return {number }
54
+ */
55
+ var maximumRemovals = function ( s , p , removable ) {
56
+
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
+ }
72
+
73
+ function isSubSet ( hash ) {
74
+ let i = 0 ;
75
+ let j = 0 ;
76
+
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
86
+ }
87
+
88
+ return k ;
89
+ } ;
You can’t perform that action at this time.
0 commit comments