Welcome to Subscribe On Youtube
1974. Minimum Time to Type Word Using Special Typewriter
Description
There is a special typewriter with lowercase English letters 'a'
to 'z'
arranged in a circle with a pointer. A character can only be typed if the pointer is pointing to that character. The pointer is initially pointing to the character 'a'
.
Each second, you may perform one of the following operations:
- Move the pointer one character counterclockwise or clockwise.
- Type the character the pointer is currently on.
Given a string word
, return the minimum number of seconds to type out the characters in word
.
Example 1:
Input: word = "abc" Output: 5 Explanation: The characters are printed as follows: - Type the character 'a' in 1 second since the pointer is initially on 'a'. - Move the pointer clockwise to 'b' in 1 second. - Type the character 'b' in 1 second. - Move the pointer clockwise to 'c' in 1 second. - Type the character 'c' in 1 second.
Example 2:
Input: word = "bza" Output: 7 Explanation: The characters are printed as follows: - Move the pointer clockwise to 'b' in 1 second. - Type the character 'b' in 1 second. - Move the pointer counterclockwise to 'z' in 2 seconds. - Type the character 'z' in 1 second. - Move the pointer clockwise to 'a' in 1 second. - Type the character 'a' in 1 second.
Example 3:
Input: word = "zjpc" Output: 34 Explanation: The characters are printed as follows: - Move the pointer counterclockwise to 'z' in 1 second. - Type the character 'z' in 1 second. - Move the pointer clockwise to 'j' in 10 seconds. - Type the character 'j' in 1 second. - Move the pointer clockwise to 'p' in 6 seconds. - Type the character 'p' in 1 second. - Move the pointer counterclockwise to 'c' in 13 seconds. - Type the character 'c' in 1 second.
Constraints:
1 <= word.length <= 100
word
consists of lowercase English letters.
Solutions
-
class Solution { public int minTimeToType(String word) { int ans = 0; int prev = 0; for (char c : word.toCharArray()) { int curr = c - 'a'; int t = Math.abs(prev - curr); t = Math.min(t, 26 - t); ans += t + 1; prev = curr; } return ans; } }
-
class Solution { public: int minTimeToType(string word) { int ans = 0; int prev = 0; for (char& c : word) { int curr = c - 'a'; int t = abs(prev - curr); t = min(t, 26 - t); ans += t + 1; prev = curr; } return ans; } };
-
class Solution: def minTimeToType(self, word: str) -> int: ans = prev = 0 for c in word: curr = ord(c) - ord('a') t = abs(prev - curr) t = min(t, 26 - t) ans += t + 1 prev = curr return ans
-
func minTimeToType(word string) int { ans, prev := 0, 0 for _, c := range word { curr := int(c - 'a') t := abs(prev - curr) t = min(t, 26-t) ans += t + 1 prev = curr } return ans } func abs(x int) int { if x < 0 { return -x } return x }