2055. 蜡烛之间的盘子

exiaohu 于 2022-03-08 发布

题目链接: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]