Monday, March 1, 2021

[Google Question][LeetCode] Single-Row Keyboard

Problem:  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.

Example:

Input: keyboard = "abcdefghijklmnopqrstuvwxyz", word = "cba"
Output: 4
Explanation: The index moves from 0 to 2 to write 'c' then to 1 to write 'b' then to 0 again to write 'a'.
Total time = 2 + 1 + 1 = 4. 
Input: keyboard = "pqrstuvwxyzabcdefghijklmno", word = "leetcode"
Output: 73


Approach: Nothing to explain here. We can solve it using hash easily.


Implementation in C#:

    public int CalculateTime(string keyboard, string word) 

    {

        Dictionary<char, int> keyboardCharIndexesMap = new Dictionary<char, int>();    

        for (int i = 0; i < keyboard.Length; ++i)

        {

            keyboardCharIndexesMap[keyboard[i]] = i;

        }

        int result = 0;

        int prevIndex = 0;

        foreach(char ch in word)

        {

            result += Math.Abs(keyboardCharIndexesMap[ch] - prevIndex);

            prevIndex = keyboardCharIndexesMap[ch];

        }

        return result;

    }


Complexity: O(n)


No comments:

Post a Comment