Talentd
FleetCode
Make and follow sheets.Sign in

Minimum Time to Type Word Using Special Typewriter solution and explanation

EasyGreedyString6 min read79.1% acceptanceUpdated 9 Apr 2026
5834. Minimum Time to Type Word Using Special Typewriter | Leetcode Biweekly Contest 59 | SolutionAbhinav Awasthi · 7:47 · 926 viewsWatch on YouTube
9 more videos on this problem
  1. 5834. Minimum Time to Type Word Using Special Typewriter | Leetcode Biweekly Contest 59 | SolutionAbhinav Awasthi · 7:47 · 926 views
  2. 1974. Minimum Time to Type Word Using Special Typewriter (Leetcode Easy)Programming Live with Larry · 5:24 · 811 views
  3. Leetcode Biweekly Contest 59 | PROBLEM 1974, 1975 | LEETCODE | GREEDYcode Explainer · 8:27 · 733 views
  4. Leetcode problem: 1974. Minimum Time to Type Word Using Special TypewriterDetective Coder · 16:09 · 512 views
  5. 1974. Minimum Time to Type Word Using Special Typewriter - Daily Leetcode (Day 23)yeetcode · 12:04 · 505 views
  6. Minimum time to type word using special typewriter(solution)Love Parashar · 3:01 · 420 views
  7. Minimum Time to Type Word Using Special Typewriter | Leetcode 1974 |Approach + Code with explanationPirai's Academy · 8:19 · 360 views
  8. Minimum time to type word using special typewriter (Biweekly contest 59 leetcode)Love Parashar · 3:01 · 223 views
  9. LeetCode 1974 | Minimum Time to Type Word Using Special Typewriter | String | JavaSleepy Cracker · 4:49 · 189 views
  10. Minimum Time to type using special typewriter Leetcode biweekly contest 59CodeinDepth · 8:21 · 285 views

The problem

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.

Approach overview

Problem Overview: You start with a pointer on character 'a' of a circular typewriter containing the letters a to z. For each character in the target word, rotate the pointer either clockwise or counterclockwise to reach the letter, then press the key to type it. The goal is to compute the minimum total time required.

Approach 1: Simple Circular Distance Calculation (Greedy) (Time: O(n), Space: O(1))

The alphabet forms a circle of 26 characters. Moving from one letter to another has two possible paths: clockwise and counterclockwise. For each character in the word, compute the distance from the current pointer position using abs(curr - target). The opposite direction distance is 26 - diff. Choose the smaller value and add 1 second for pressing the key. Update the pointer to the typed character and continue scanning the string.

This works because each step is independent. The optimal move between two letters is always the shorter circular distance. No dynamic programming or backtracking is required. The algorithm simply iterates once through the word, making it linear time. This problem mainly tests understanding of circular distance calculations in string problems and applying a straightforward greedy decision at every step.

Approach 2: Prefix Sum Optimization (Time: O(n), Space: O(n))

If multiple distance queries were required, you could precompute cumulative rotation costs using a prefix structure. Convert each character into an index from 0–25 and precompute distances between adjacent characters in the word. A prefix sum array stores cumulative typing cost so that partial ranges can be evaluated quickly. Each transition still uses the same circular distance formula, but prefix sums make it easy to reuse computed movement costs.

For this specific problem the prefix sum approach does not improve asymptotic complexity. The word is processed once and each step is constant work, so the greedy scan is already optimal. Prefix sums mainly demonstrate how repeated movement computations could be aggregated when the problem expands to multiple queries or substring evaluations. It connects with common preprocessing patterns used in string traversal problems.

Recommended for interviews: The greedy circular distance solution is what interviewers expect. It shows you recognized the alphabet is a ring and minimized rotation using min(diff, 26 - diff). Mentioning the prefix-sum idea demonstrates awareness of preprocessing techniques, but the O(n) greedy scan is the clean and optimal implementation.

Approach 1: Simple Circular Distance Calculation

This approach simplifies the problem by calculating the distance between each consecutive character in the word, taking advantage of the circular arrangement. The cost to move the pointer from one character to another is the minimum of the clockwise and counterclockwise distances. The algorithm iterates over the characters of the word, maintaining a total cost variable to track the number of seconds taken.

def minTimeToType(word: str) -> int:
    time = 0
    current = 'a'
    for letter in word:
        clockwise = abs(ord(letter) - ord(current))
        counterClockwise = 26 - clockwise
        time += min(clockwise, counterClockwise) + 1
        current = letter
    return time

print(minTimeToType("bza"))  # Output: 7
public class Main {
    public static int minTimeToType(String word) {
        int time = 0;
        char current = 'a';
        for (char c : word.toCharArray()) {
            int clockwise = Math.abs(c - current);
            int counterClockwise = 26 - clockwise;
            time += Math.min(clockwise, counterClockwise) + 1;
            current = c;
        }
        return time;
    }
    public static void main(String[] args) {
        System.out.println(minTimeToType("bza")); // Output: 7
    }
}
#include <iostream>
#include <string>
#include <cmath>

int minTimeToType(const std::string& word) {
    int time = 0;
    char current = 'a';
    for (char letter : word) {
        int clockwise = std::abs(letter - current);
        int counterClockwise = 26 - clockwise;
        time += std::min(clockwise, counterClockwise) + 1;
        current = letter;
    }
    return time;
}

int main() {
    std::cout << minTimeToType("bza") << std::endl; // Output: 7
    return 0;
}
function minTimeToType(word) {
    let time = 0;
    let current = 'a';
    for (let letter of word) {
        let clockwise = Math.abs(letter.charCodeAt(0) - current.charCodeAt(0));
        let counterClockwise = 26 - clockwise;
        time += Math.min(clockwise, counterClockwise) + 1;
        current = letter;
    }
    return time;
}

console.log(minTimeToType("bza")); // Output: 7
#include <stdio.h>
#include <math.h>

int minTimeToType(char* word) {
    int time = 0, n = strlen(word);
    char current = 'a';
    for (int i = 0; i < n; i++) {
        int clockwise = abs(word[i] - current);
        int counterClockwise = 26 - clockwise;
        time += fmin(clockwise, counterClockwise) + 1; // 1 second to type
        current = word[i];
    }
    return time;
}

int main() {
    printf("%d\n", minTimeToType("bza")); // Output: 7
    return 0;
}
using System;

class Program {
    public static int MinTimeToType(string word) {
        int time = 0;
        char current = 'a';
        foreach (char c in word) {
            int clockwise = Math.Abs(c - current);
            int counterClockwise = 26 - clockwise;
            time += Math.Min(clockwise, counterClockwise) + 1;
            current = c;
        }
        return time;
    }
    static void Main() {
        Console.WriteLine(MinTimeToType("bza")); // Output: 7
    }
}

The Python solution uses simple string and character arithmetic to find the time required to type the provided word. The built-in ord function helps evaluate the ASCII value of each character for distance calculation, allowing efficient use of looping statements.

Complexity

Time Complexity: O(n)
Space Complexity: O(1).

Try this approach in the editor

Approach 2: Prefix Sum Optimization

This approach employs a prefix sum-like optimization, where the traversal through the word strives to minimize the rotational efforts by pre-calculating movement directions and remembering previous movement choices. It considers the word as a sequence of weights, emphasizing preemptive minimization for longer strings where potential repetitive patterns might occur.

def minTimeToType(word: str) -> int:
    time = 0
    current = 'a'
    for letter in word:
        clockwise = abs(ord(letter) - ord(current))
        counterClockwise = 26 - clockwise
        time += (clockwise if clockwise <= counterClockwise else counterClockwise) + 1
        current = letter
    return time

print(minTimeToType("zjpc"))  # Output: 34
public class Main {
    public static int minTimeToType(String word) {
        int time = 0;
        char current = 'a';
        for (char c : word.toCharArray()) {
            int clockwise = Math.abs(c - current);
            int counterClockwise = 26 - clockwise;
            time += ((clockwise <= counterClockwise) ? clockwise : counterClockwise) + 1;
            current = c;
        }
        return time;
    }
    public static void main(String[] args) {
        System.out.println(minTimeToType("zjpc")); // Output: 34
    }
}
#include <iostream>
#include <string>
#include <cmath>

int minTimeToType(const std::string& word) {
    int time = 0;
    char current = 'a';
    for (char letter : word) {
        int clockwise = std::abs(letter - current);
        int counterClockwise = 26 - clockwise;
        time += ((clockwise < counterClockwise) ? clockwise : counterClockwise) + 1;
        current = letter;
    }
    return time;
}

int main() {
    std::cout << minTimeToType("zjpc") << std::endl; // Output: 34
    return 0;
}
function minTimeToType(word) {
    let time = 0;
    let current = 'a';
    for (let letter of word) {
        let clockwise = Math.abs(letter.charCodeAt(0) - current.charCodeAt(0));
        let counterClockwise = 26 - clockwise;
        time += ((clockwise <= counterClockwise) ? clockwise : counterClockwise) + 1;
        current = letter;
    }
    return time;
}

console.log(minTimeToType("zjpc")); // Output: 34
#include <stdio.h>
#include <math.h>
#include <string.h>

int minTimeToType(char* word) {
    int time = 0, n = strlen(word);
    char current = 'a';
    for (int i = 0; i < n; i++) {
        int clockwise = abs(word[i] - current);
        int counterClockwise = 26 - clockwise;
        time += ((clockwise <= counterClockwise) ? clockwise : counterClockwise) + 1;
        current = word[i];
    }
    return time;
}

int main() {
    printf("%d\n", minTimeToType("zjpc")); // Output: 34
    return 0;
}
using System;

class Program {
    public static int MinTimeToType(string word) {
        int time = 0;
        char current = 'a';
        foreach (char c in word) {
            int clockwise = Math.Abs(c - current);
            int counterClockwise = 26 - clockwise;
            time += ((clockwise < counterClockwise) ? clockwise : counterClockwise) + 1;
            current = c;
        }
        return time;
    }
    static void Main() {
        Console.WriteLine(MinTimeToType("zjpc")); // Output: 34
    }
}

Python uses direct comparative calculations and preferring minimal movements by examining, at each step, whether to choose the minimal path for future benefits, increasing the general prefix sum principle.

Complexity

Time Complexity: O(n)
Space Complexity: O(1).

Try this approach in the editor

Approach 3: Greedy

We initialize the answer variable ans to the length of the string, indicating that we need at least ans seconds to type the string.

Next, we traverse the string. For each character, we calculate the minimum distance between the current character and the previous character, and add this distance to the answer. Then we update the current character to the previous character and continue traversing.

The time complexity is O(n), where n is the length of the string. The space complexity is O(1).

function minTimeToType(word: string): number {
    let a = 'a'.charCodeAt(0);
    let ans = word.length;
    for (const c of word) {
        const d = Math.abs(c.charCodeAt(0) - a);
        ans += Math.min(d, 26 - d);
        a = c.charCodeAt(0);
    }
    return ans;
}
func minTimeToType(word string) int {
	ans := len(word)
	a := rune('a')
	for _, c := range word {
		d := int(max(a-c, c-a))
		ans += min(d, 26-d)
		a = c
	}
	return ans
}
Try this approach in the editor

Complexity comparison

ApproachComplexity
Simple Circular Distance Calculation

Time Complexity: O(n)
Space Complexity: O(1).

Prefix Sum Optimization

Time Complexity: O(n)
Space Complexity: O(1).

Greedy–

Complexity analysis

ApproachTimeSpaceWhen to Use
Simple Circular Distance Calculation (Greedy)O(n)O(1)Best for the standard problem. Single pass through the word with constant memory.
Prefix Sum OptimizationO(n)O(n)Useful when extending the problem to multiple queries or repeated substring cost calculations.

Frequently asked questions

Is Minimum Time to Type Word Using Special Typewriter easy or hard?

This problem is categorized as Easy with a high acceptance rate around 78%. The key idea is recognizing that the alphabet behaves like a circular array and always choosing the shorter rotation direction.

Minimum Time to Type Word Using Special Typewriter Python/Java solution

The implementation iterates through the word, converts characters to indices using ASCII arithmetic, calculates min(diff, 26 - diff), and accumulates the result. The same logic works in Python, Java, C++, C#, and JavaScript with identical O(n) complexity.

How to solve Minimum Time to Type Word Using Special Typewriter in O(n)?

Track the current pointer position starting at 'a'. For each target character, compute the index difference using abs(curr - target). The minimum rotation is min(diff, 26 - diff). Add this rotation time plus one second for typing the character, then update the pointer position.

What is the best approach for Minimum Time to Type Word Using Special Typewriter?

The optimal approach is a greedy circular distance calculation. For each character, compute the clockwise distance and the counterclockwise distance on the 26-letter ring, then choose the smaller one. Add one second for pressing the key. This produces an O(n) time and O(1) space solution.

Is Minimum Time to Type Word Using Special Typewriter asked at Google/Amazon/Meta?

Problems involving circular distance, greedy decisions, and string traversal frequently appear in interviews at companies like Amazon and Google. While this exact question may vary, the underlying pattern of minimizing movement on a circular structure is a common interview concept.

What data structure is used in Minimum Time to Type Word Using Special Typewriter?

The solution mainly uses simple string traversal and integer arithmetic. Characters are converted to numeric indices (0–25) to compute circular distances. No advanced data structures are required, which is why the problem is classified as Easy.

What is the time complexity of Minimum Time to Type Word Using Special Typewriter?

The time complexity is O(n), where n is the length of the word. Each character is processed once and the rotation cost is computed using constant-time arithmetic. Space complexity is O(1) because only the current pointer position and total time are tracked.

Comments

Now write it yourselfClose this page and solve Minimum Time to Type Word Using Special Typewriter in the editor, without looking.
Practise Minimum Time to Type Word Using Special Typewriter