Back to all solutions

#1165 - Single-Row Keyboard

Problem Description

There is a special keyboard with all keys in a single row.

Given a string keyboard of length 26 indicating the layout of the keyboard (indexed from 0 to 25). Initially, your finger is at index 0. To type a character, you have to move your finger to the index of the desired character. The time taken to move your finger from index i to index j is |i - j|.

You want to type a string word. Write a function to calculate how much time it takes to type it with one finger.

Solution

/**
 * @param {string} keyboard
 * @param {string} word
 * @return {number}
 */
var calculateTime = function(keyboard, word) {
  const map = new Map();

  for (let i = 0; i < keyboard.length; i++) {
    map.set(keyboard[i], i);
  }

  let currentPosition = 0;
  let result = 0;

  for (const char of word) {
    const targetPosition = map.get(char);
    result += Math.abs(currentPosition - targetPosition);
    currentPosition = targetPosition;
  }

  return result;
};