-
Notifications
You must be signed in to change notification settings - Fork 53
/
Copy path1165. Single-Row Keyboard.js
50 lines (47 loc) · 1.41 KB
/
1165. Single-Row Keyboard.js
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
// 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 1:
//
// 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.
//
// Example 2:
//
// Input: keyboard = "pqrstuvwxyzabcdefghijklmno", word = "leetcode"
// Output: 73
//
// Constraints:
//
// keyboard.length == 26
// keyboard contains each English lowercase letter exactly once in some order.
// 1 <= word.length <= 10^4
// word[i] is an English lowercase letter.
/**
* @param {string} keyboard
* @param {string} word
* @return {number}
*/
// Hashmap
// Time O(n)
// Space O(1)
const calculateTime = (keyboard, word) => {
const map = {};
for (let i = 0; i < keyboard.length; i++) {
const c = keyboard[i];
map[c] = i;
}
let pre = 0;
let res = 0;
for (const c of word) {
const i = map[c];
res += Math.abs(i - pre);
pre = i;
}
return res;
};