Back to all solutions

#1427 - Perform String Shifts

Problem Description

You are given a string s containing lowercase English letters, and a matrix shift, where shift[i] = [directioni, amounti]:

  • directioni can be 0 (for left shift) or 1 (for right shift).
  • amounti is the amount by which string s is to be shifted.
  • A left shift by 1 means remove the first character of s and append it to the end.
  • Similarly, a right shift by 1 means remove the last character of s and add it to the beginning.

Return the final string after all operations.

Solution

/**
 * @param {string} s
 * @param {number[][]} shift
 * @return {string}
 */
var stringShift = function(s, shift) {
  let netShift = 0;

  for (const [direction, amount] of shift) {
    netShift += direction === 0 ? -amount : amount;
  }

  const n = s.length;
  netShift = ((netShift % n) + n) % n;

  return s.slice(-netShift) + s.slice(0, -netShift);
};