1
1
class Solution {
2
+ private char [] s ;
3
+ private char [] p ;
4
+ private int [] removable ;
5
+
2
6
public int maximumRemovals (String s , String p , int [] removable ) {
3
- int left = 0 , right = removable .length ;
4
- while (left < right ) {
5
- int mid = (left + right + 1 ) >> 1 ;
6
- if (check (s , p , removable , mid )) {
7
- left = mid ;
7
+ int l = 0 , r = removable .length ;
8
+ this .s = s .toCharArray ();
9
+ this .p = p .toCharArray ();
10
+ this .removable = removable ;
11
+ while (l < r ) {
12
+ int mid = (l + r + 1 ) >> 1 ;
13
+ if (check (mid )) {
14
+ l = mid ;
8
15
} else {
9
- right = mid - 1 ;
16
+ r = mid - 1 ;
10
17
}
11
18
}
12
- return left ;
19
+ return l ;
13
20
}
14
21
15
- private boolean check (String s , String p , int [] removable , int mid ) {
16
- int m = s .length (), n = p .length (), i = 0 , j = 0 ;
17
- Set <Integer > ids = new HashSet <>();
18
- for (int k = 0 ; k < mid ; ++k ) {
19
- ids .add (removable [k ]);
22
+ private boolean check (int k ) {
23
+ boolean [] rem = new boolean [s .length ];
24
+ for (int i = 0 ; i < k ; ++i ) {
25
+ rem [removable [i ]] = true ;
20
26
}
21
- while (i < m && j < n ) {
22
- if (!ids .contains (i ) && s .charAt (i ) == p .charAt (j )) {
27
+ int i = 0 , j = 0 ;
28
+ while (i < s .length && j < p .length ) {
29
+ if (!rem [i ] && p [j ] == s [i ]) {
23
30
++j ;
24
31
}
25
32
++i ;
26
33
}
27
- return j == n ;
34
+ return j == p . length ;
28
35
}
29
- }
36
+ }
0 commit comments