1
// time O(N + M) Space O(N) N = s.length M = query.length
2
var platesBetweenCandles = function (s, queries) {
3
let platPreFixSum = [...Array(s.length + 1)];
4
let leftViewCandle = [...Array(s.length + 1)];
5
let rightViewCandle = [...Array(s.length + 1)];
6

7
platPreFixSum[0] = 0;
8
leftViewCandle[0] = -1;
9
rightViewCandle[s.length] = -1;
10

11
for (let i = 1; i <= s.length; i++) {
12
platPreFixSum[i] =
13
s[i - 1] == "*" ? platPreFixSum[i - 1] + 1 : platPreFixSum[i - 1];
14
leftViewCandle[i] = s[i - 1] == "|" ? i - 1 : leftViewCandle[i - 1];
15
rightViewCandle[s.length - i] =
16
s[s.length - i] == "|" ? s.length - i : rightViewCandle[s.length - i + 1];
17
}
18

19
let result = [];
20

21
queries.forEach(([left, right]) => {
22
if (
23
rightViewCandle[left] >= 0 &&
24
leftViewCandle[right + 1] >= 0 &&
25
rightViewCandle[left] < leftViewCandle[right + 1]
26
) {
27
result.push(
28
platPreFixSum[leftViewCandle[right + 1]] -
29
platPreFixSum[rightViewCandle[left]]
30
);
31
} else {
32
result.push(0);
33
}
34
});
35

36
return result;
37
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0