Description
You are given a string moves of length n consisting only of characters 'L', 'R', and '_'. The string represents your movement on a number line starting from the origin 0.
In the ith move, you can choose one of the following directions:
- move to the left if
moves[i] = 'L'ormoves[i] = '_' - move to the right if
moves[i] = 'R'ormoves[i] = '_'
Return the distance from the origin of the furthest point you can get to after n moves.
Example 1:
Input: moves = "L_RL__R" Output: 3 Explanation: The furthest point we can reach from the origin 0 is point -3 through the following sequence of moves "LLRLLLR".
Example 2:
Input: moves = "_R__LL_" Output: 5 Explanation: The furthest point we can reach from the origin 0 is point -5 through the following sequence of moves "LRLLLLL".
Example 3:
Input: moves = "_______" Output: 7 Explanation: The furthest point we can reach from the origin 0 is point 7 through the following sequence of moves "RRRRRRR".
Constraints:
1 <= moves.length == n <= 50movesconsists only of characters'L','R'and'_'.
Solutions
This elegant solution uses a counter to track the net displacement from known moves ('L' decrements, 'R' increments) and same to count underscore moves. After processing all moves, the absolute value of counter gives the minimum distance guaranteed by known moves, and same represents the number of free choices that can all be assigned to amplify that distance in the optimal direction. Therefore, adding Math.abs(counter) + same yields the furthest possible distance.
/**
* @param {string} moves
* @return {number}
*/
var furthestDistanceFromOrigin = function(moves) {
let counter = 0;
let same = 0;
for (const move of moves) {
if (move === 'L') {
counter--;
} else if (move === 'R') {
counter++;
} else {
same++;
}
}
return Math.abs(counter) + same;
};