classSolution: defmaximumRemovals(self, s: str, p: str, removable: List[int]) -> int: defsearch_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 defcheck(x) ->bool: # 注意,python的str是不可变的,转list去计算可以,但是会超时,所以建一个辅助list。 sn = len(s) pn = len(p) state = [True]*sn for i inrange(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