# 1898. Maximum Number of Removable Characters
###### tags: `Leetcode` `Medium` `Binary Search`
Link: https://leetcode.com/problems/maximum-number-of-removable-characters/description/
## 思路
binary search by value
每次binary search用双指针检查p是不是 被删完某些字母的arr 的substring
用map存下removable的每个值及它对应的index 这样每次check的时候我们可以在遍历arr的时候检查当下index是不是大于mid 如果大于mid就说明当下字母没有被删除
## Code
```java=
class Solution {
public int maximumRemovals(String s, String p, int[] removable) {
char[] arr = s.toCharArray();
int start = 0, end = removable.length;
Map<Integer, Integer> map = new HashMap<>();
for(int i=0; i<removable.length; i++){
map.put(removable[i], i);
}
while(start<end){
int mid = start+(end-start)/2;
if(check(arr, p, map, mid)) start = mid+1;
else end = mid;
}
return start;
}
public boolean check(char[] arr, String p, Map<Integer, Integer> map, int mid) {
int i1 = 0, i2 = 0;
while (i1 < arr.length && i2 < p.length()) {
char curr = arr[i1], curr2 = p.charAt(i2);
if (map.getOrDefault(i1, Integer.MAX_VALUE)>mid && curr == curr2) i2++;
i1++;
}
if (i2 == p.length()) return true;
return false;
}
}
```