Maximum Number of Removable Characters
Last updated
Last updated
class Solution {
public int maximumRemovals(String s, String p, int[] removable) {
int[] removeOrder = new int[s.length()];
Arrays.fill(removeOrder, s.length());
for (int i = 0; i < removable.length; ++i) {
removeOrder[removable[i]] = i; // 记录每个index在removable数组中的index
}
int left = 0, right = removable.length;
while (left + 1 < right) {
int mid = (left + right) / 2;
if (check(s, p, removeOrder, mid)) {
left = mid;
} else {
right = mid;
}
}
if (check(s, p, removeOrder, right)) {
return right;
} else {
return left;
}
}
// 检查 removable 数组中前 len 个index 能否被remove
private boolean check(String s, String p, int[] removeOrder, int len) {
int j = 0;
for (int i = 0; i < s.length() && j < p.length(); ++i) {
if (removeOrder[i] < len) {
// 表示当前s中的index i位于removable中前len个位置,需要删掉,所以不和p比较直接跳过
continue;
}
if (s.charAt(i) == p.charAt(j)) {
j++;
}
}
if (j == p.length()) {
return true;
}
return false;
}
}