Skip to content

Commit 3ca1f99

Browse files
authored
Create 1898-maximum-number-of-removable-characters.js
Solved maximum-number-of-removable-characters in JS.
1 parent 794f343 commit 3ca1f99

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
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+
};

0 commit comments

Comments
 (0)