Skip to content

Commit 736719c

Browse files
authored
Merge pull request #2621 from aadil42/patch-64
Create 1898-maximum-number-of-removable-characters.js
2 parents 28240ca + f58bdb2 commit 736719c

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/**
2+
* https://leetcode.com/problems/maximum-number-of-removable-characters/
3+
*
4+
* Brute force
5+
* Time O(removable.length * s.length) | Space O(n)
6+
* @param {string} s
7+
* @param {string} p
8+
* @param {number[]} removable
9+
* @return {number}
10+
*/
11+
var maximumRemovals1 = function(s, p, removable) {
12+
let k = 0;
13+
// removable.reverse();
14+
s = s.split('');
15+
p = p.split('');
16+
17+
for (let i = 0; i < removable.length; i++) {
18+
s[removable[i]] = -1;
19+
if (isSubSet1(s, p)) {
20+
k++;
21+
continue;
22+
}
23+
return k;
24+
}
25+
26+
return k;
27+
};
28+
29+
// helper function.
30+
function isSubSet1(s, p) {
31+
let i = 0;
32+
let j = 0;
33+
34+
while (i < s.length && j < p.length) {
35+
if (s[i] === p[j]) {
36+
i++;
37+
j++;
38+
} else {
39+
i++;
40+
}
41+
}
42+
43+
return j === p.length;
44+
}
45+
46+
47+
/**
48+
*
49+
* Binary Search
50+
* n = length of string, k = length of removable
51+
* Time O(log(k)*n) | Space O(1)
52+
* @param {string} s
53+
* @param {string} p
54+
* @param {number[]} removable
55+
* @return {number}
56+
*/
57+
var maximumRemovals = function(s, p, removable) {
58+
59+
let left = 0;
60+
let right = removable.length - 1;
61+
let k = 0;
62+
63+
while (left <= right) {
64+
const mid = (left + right) >> 1;
65+
const hash = new Set(removable.slice(0, mid + 1));
66+
67+
if (isSubSet(hash, s, p)) {
68+
k = Math.max(k, mid + 1);
69+
left = mid + 1;
70+
continue;
71+
}
72+
73+
right = mid - 1;
74+
}
75+
76+
return k;
77+
};
78+
79+
// helper function.
80+
function isSubSet(hash, s, p) {
81+
let i = 0;
82+
let j = 0;
83+
84+
while (i < s.length && j < p.length) {
85+
if (s[i] === p[j] && !hash.has(i)) {
86+
i++;
87+
j++;
88+
continue;
89+
}
90+
91+
i++;
92+
}
93+
94+
return j === p.length;
95+
}

0 commit comments

Comments
 (0)