3846. Total Distance to Type a String Using One Finger π
Description
There is a special keyboard where keys are arranged in a rectangular grid as follows.
| q | w | e | r | t | y | u | i | o | p |
| a | s | d | f | g | h | j | k | l | |
| z | x | c | v | b | n | m |
You are given a string s that consists of lowercase English letters only. Return an integer denoting the total distance to type s using only one finger. Your finger starts on the key 'a'.
The distance between two keys at (r1, c1) and (r2, c2) is |r1 - r2| + |c1 - c2|.
Example 1:
Input: s = "hello"
Output: 17
Explanation:
- Your finger starts at
'a', which is at(1, 0). - Move to
'h', which is at(1, 5). The distance is|1 - 1| + |0 - 5| = 5. - Move to
'e', which is at(0, 2). The distance is|1 - 0| + |5 - 2| = 4. - Move to
'l', which is at(1, 8). The distance is|0 - 1| + |2 - 8| = 7. - Move to
'l', which is at(1, 8). The distance is|1 - 1| + |8 - 8| = 0. - Move to
'o', which is at(0, 8). The distance is|1 - 0| + |8 - 8| = 1. - Total distance is
5 + 4 + 7 + 0 + 1 = 17.
Example 2:
Input: s = "a"
Output: 0
Explanation:
- Your finger starts at
'a', which is at(1, 0). - Move to
'a', which is at(1, 0). The distance is|1 - 1| + |0 - 0| = 0. - Total distance is 0.
Constraints:
1 <= s.length <= 104sconsists of lowercase English letters only.
Solutions
Solution 1: Simulation
Thinking
One finger starts at \(\texttt{a}\) and types \(s\) in order, paying Manhattan distance on the keyboard grid. \(|s| \le 10^4\) and the layout is fixed.
The distance between two successive keys depends only on those two coordinates.
Precompute the three-row positions, then accumulate adjacent Manhattan distances from an implicit start at \(\texttt{a}\).
One scan is the total travel.
We define a hash table \(\textit{pos}\) to store the position of each character on the keyboard. For each character in string \(s\), we calculate the distance from the previous character to the current character and accumulate it to the answer. Finally, we return the answer.
The time complexity is \(O(n)\), where \(n\) is the length of string \(s\). The space complexity is \(O(|\Sigma|)\), where \(\Sigma\) is the character set, which here is 26 lowercase English letters.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
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 | |
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 | |
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 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |