class Solution {
public int[] platesBetweenCandles(String s, int[][] queries) {
// 前缀和
int n = s.length();
int[] preSum = new int[n];
for (int i = 0, sum = 0; i < n; i++) {
if (s.charAt(i) == '*') {
sum++;
}
preSum[i] = sum;
}
// 预处理,左右数组,每个位置左侧的第一个蜡烛和右侧的第一个蜡烛
int[] left = new int[n];
for (int i = 0, l = -1; i < n; i++) {
if (s.charAt(i) == '|') {
l = i;
}
left[i] = l;
}
int[] right = new int[n];
for (int i = n - 1, r = -1; i >= 0; i--) {
if (s.charAt(i) == '|') {
r = i;
}
right[i] = r;
}
int[] ans = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
int[] qurey = queries[i];
int x = right[qurey[0]];
int y = left[qurey[1]];
// 可能某个位置的左侧或右侧是不存在蜡烛的,此时我们将对应数组的值记为-1。当x为-1或者y为−1或者x≥y时,不存在满足条件的盘子。
ans[i] = x == -1 || y == -1 || x >=y ? 0 : preSum[y] - preSum[x];
}
return ans;
}
}
2055. 蜡烛之间的盘子
最新推荐文章于 2024-05-18 22:54:20 发布