1898. 可移除字符的最大数目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution:
def maximumRemovals(self, s: str, p: str, removable: List[int]) -> int:
def search_II(check):
left = 1
right = len(removable)
while left<=right:
mid = (left+right)>>1
if check(mid):
left = mid+1
else:
right = mid-1
return right
def check(x) ->bool:
# 注意,python的str是不可变的,转list去计算可以,但是会超时,所以建一个辅助list。
sn = len(s)
pn = len(p)
state = [True]*sn
for i in range(x):
state[removable[i]] = False
ans = 0
i,j = 0,0
while i<sn and j<pn:
if state[i] and s[i]==p[j]:
i += 1
j += 1
ans += 1
else:
i += 1
return ans == pn

return search_II(check)