Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 18x 14x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 18x 18x 18x 8x 8x 18x 4x 4x 18x 6x 6x 18x 3x 3x 3x 1x 1x | // There is a street described by a string S. Each character in S is one of the following:
// "<" denotes a car going to the left,
// "" denotes a car going to the right,
// " denotes a speed camera.
// Count the total number of times that cars pass by a speed camera. A car going to the left will pass every speed camera that is to the left of it, and similarly, a car going to the right will pass every speed camera to the right of it.
// Write a function:
// class Solution { public int solution(String S); )
// that, given a string S of length N, returns the total number of times that cars pass by a speed camera.
// Examples:
// 1. Given S=".>..." the function should return 3. The car will pass by three speed cameras to the
// right of it.
// 2. Given S = " .> .<.>" the function should return 4. The first two cars will pass by two speed
// cameras each, and the third car will not pass by any.
// 3. Given S = ">>>.<<<", the function should return 6. Each car will pass one speed camera.
// Assume that:
// • N is an integer within the range [1...100];
// • string S is made only of the following characters: '<, '>' and/or'
// In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment.
// .>...
const solution = (s: string): number => {
let result = 0;
// total cars right = 0;
// find total cars Lefts
let totalCarsRight = 0;
let totalCarsLeft = s.split("").reduce((pre, curr) => {
if (curr === "<") return pre + 1;
return pre;
}, 0);
// loop to s with item
// if item = "." -> update result += total cars right + total cars left
// if item = "<"
// update total cars left -= 1
// if item = "<"
// update total cars right += 1
for (let i = 0; i < s.length; i++) {
const item = s[i];
if (item === ".") {
result += totalCarsLeft + totalCarsRight;
}
if (item === "<") {
totalCarsLeft -= 1;
}
if (item === ">") {
totalCarsRight += 1;
}
}
return result;
};
export default solution;
|