-
Notifications
You must be signed in to change notification settings - Fork 110
Expand file tree
/
Copy pathplates-between-candles.cpp
More file actions
31 lines (30 loc) · 918 Bytes
/
plates-between-candles.cpp
File metadata and controls
31 lines (30 loc) · 918 Bytes
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
// Time: O(n + q)
// Space: O(n)
class Solution {
public:
vector<int> platesBetweenCandles(string s, vector<vector<int>>& queries) {
vector<int> left(size(s));
unordered_map<int, int> prefix;
for (int i = 0, curr = -1, cnt = 0; i < size(s); ++i) {
if (s[i] == '|') {
curr = i;
prefix[i] = ++cnt;
}
left[i] = curr;
}
vector<int> right(size(s));
for (int i = size(s) - 1, curr = size(s), cnt = 0; i >= 0; --i) {
if (s[i] == '|') {
curr = i;
++cnt;
}
right[i] = curr;
}
vector<int> result;
for (const auto& q : queries) {
const int l = right[q[0]], r = left[q[1]];
result.emplace_back(l < r ? (r - l + 1) - (prefix[r] - prefix[l] + 1) : 0);
}
return result;
}
};