Skip to content

Commit 6350714

Browse files
Create 1898-maximum-number-of-removable-characters.java
1 parent 38a358f commit 6350714

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
public int maximumRemovals(String s, String p, int[] removable) {
3+
return binarySearch(s, p, removable);
4+
}
5+
6+
private boolean isSubsequence(String s, String p, int[] removable, int k) {
7+
Set<Integer> removedSet = new HashSet<>();
8+
for (int i = 0; i < k; i++) {
9+
removedSet.add(removable[i]);
10+
}
11+
12+
int i = 0, j = 0;
13+
while (i < s.length() && j < p.length()) {
14+
if (removedSet.contains(i) || s.charAt(i) != p.charAt(j)) {
15+
i++;
16+
} else {
17+
i++;
18+
j++;
19+
}
20+
}
21+
return j == p.length();
22+
}
23+
24+
private int binarySearch(String s, String p, int[] removable) {
25+
int left = 0, right = removable.length + 1;
26+
27+
while (left < right) {
28+
int mid = (left + right) / 2;
29+
if (isSubsequence(s, p, removable, mid)) {
30+
left = mid + 1;
31+
} else {
32+
right = mid;
33+
}
34+
}
35+
36+
return left - 1;
37+
}
38+
}

0 commit comments

Comments
 (0)