题目链接:2055. 蜡烛之间的盘子
记录每根蜡烛前面盘子的数量。 然后用二分法找到给定区间里面最左侧和最右侧的蜡烛,用最右侧蜡烛前面盘子的数量减去最左侧蜡烛前面盘子的数量。
from bisect import bisect_left, bisect_right
from typing import List
class Solution:
def platesBetweenCandles(self, s: str, queries: List[List[int]]) -> List[int]:
cdls, cnt = dict(), 0
for i, ss in enumerate(s):
if ss == '*':
cnt += 1
elif ss == '|':
cdls[i] = cnt
pos = sorted(cdls.keys())
if len(pos) == 0 or cdls[pos[-1]] == 0:
return [0] * len(queries)
return [max(0, cdls[pos[max(0, bisect_right(pos, r) - 1)]] - cdls[pos[min(bisect_left(pos, l), len(pos) - 1)]])
for l, r in queries]