Given a string **S** consisting of **N** characters (representing the tasks to perform) and a positive integer **K**, the task is to find the minimum time required to complete all the given tasks in the given order such that each task takes one unit of time and each task of the same type must be performed at an interval of **K units**.

**Examples:**

Input:S = “ABACCA”, K = 2Output:9Explanation:

Below are the order of task that is to be completed:

A → B → _ → A → C → _ → _ → C → A.

Therefore, the total time required is 9 units.

Input:S = “AAAA”, K = 3Output:13

**Approach:** The given problem can be solved by Hashing by keeping track of the last instant of each task and find the overall minimum time accordingly. Follow the steps below to solve the problem:

- Initialize a hashmap, say
**M**, to keep track of the last time instant of each task. - Initialize a variable, say
**ans**as**0**, to store the resultant minimum time. - Traverse the given string
**S**and perform the following steps:- If the character
**S[i]**is present in**M**, then store the last instant of**S[i]**in a variable, say**t**. - If the value of
**(ans – t)**is**at most K**, then**K – (ans – t) + 1**to variable**ans**. - Update the last time instant of the character
**S[i]**in**M**to**ans**, and increment the value of**ans**by**1**.

- If the character
- After completing the above steps, print the value of
**ans**as the result.

Below is the implementation of the above approach:

## C++

`// C++ implementation of` `// the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to find the minimum` `// time required to complete` `// tasks without changing their order` `void` `findMinimumTime(string tasks, ` `int` `K)` `{` ` ` `// Keeps track of the last` ` ` `// time instant of each task` ` ` `unordered_map<` `char` `, ` `int` `> map;` ` ` `// Stores the required result` ` ` `int` `curr_time = 0;` ` ` `// Traverse the given string` ` ` `for` `(` `char` `c : tasks) {` ` ` `// Check last time instant of` ` ` `// task, if it exists before` ` ` `if` `(map.find(c) != map.end()) {` ` ` `// Increment the time` ` ` `// if task is within` ` ` `// the K units of time` ` ` `if` `(curr_time - map <= K) {` ` ` `curr_time += K - (curr_time - map) + 1;` ` ` `}` ` ` `}` ` ` `// Update the time of the` ` ` `// current task in the map` ` ` `map = curr_time;` ` ` `// Increment the time by 1` ` ` `curr_time++;` ` ` `}` ` ` `// Print the result` ` ` `cout << curr_time;` `}` `// Driver Code` `int` `main()` `{` ` ` `string S = ` `"ABACCA"` `;` ` ` `int` `K = 2;` ` ` `findMinimumTime(S, K);` ` ` `return` `0;` `}` `// This code is contributed by Kingash.` |

## Java

`// Java program for the above approach` `import` `java.util.*;` `class` `GFG {` ` ` `// Function to find the minimum` ` ` `// time required to complete` ` ` `// tasks without changing their order` ` ` `static` `void` `findMinimumTime(` ` ` `String tasks, ` `int` `K)` ` ` `{` ` ` `// Keeps track of the last` ` ` `// time instant of each task` ` ` `Map<Character, Integer> map` ` ` `= ` `new` `HashMap<>();` ` ` `// Stores the required result` ` ` `int` `curr_time = ` `0` `;` ` ` `// Traverse the given string` ` ` `for` `(` `char` `c : tasks.toCharArray()) {` ` ` `// Check last time instant of` ` ` `// task, if it exists before` ` ` `if` `(map.containsKey(c)) {` ` ` `// Increment the time` ` ` `// if task is within` ` ` `// the K units of time` ` ` `if` `(curr_time` ` ` `- map.get(c)` ` ` `<= K) {` ` ` `curr_time += K` ` ` `- (curr_time` ` ` `- map.get(c))` ` ` `+ ` `1` `;` ` ` `}` ` ` `}` ` ` `// Update the time of the` ` ` `// current task in the map` ` ` `map.put(c, curr_time);` ` ` `// Increment the time by 1` ` ` `curr_time++;` ` ` `}` ` ` `// Print the result` ` ` `System.out.println(curr_time);` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `String S = ` `"ABACCA"` `;` ` ` `int` `K = ` `2` `;` ` ` `findMinimumTime(S, K);` ` ` `}` `}` |

## Python3

`# Python 3 implementation of` `# the above approach` `# Function to find the minimum` `# time required to complete` `# tasks without changing their order` `def` `findMinimumTime(tasks, K):` ` ` `# Keeps track of the last` ` ` `# time instant of each task` ` ` `map` `=` `{}` ` ` `# Stores the required result` ` ` `curr_time ` `=` `0` ` ` `# Traverse the given string` ` ` `for` `c ` `in` `tasks:` ` ` `# Check last time instant of` ` ` `# task, if it exists before` ` ` `if` `(c ` `in` `map` `):` ` ` `# Increment the time` ` ` `# if task is within` ` ` `# the K units of time` ` ` `if` `(curr_time ` `-` `map` ` <` `=` `K):` ` ` `curr_time ` `+` `=` `K ` `-` `(curr_time ` `-` `map` `) ` `+` `1` ` ` `# Update the time of the` ` ` `# current task in the map` ` ` `map` ` ` `=` `curr_time` ` ` `# Increment the time by 1` ` ` `curr_time ` `+` `=` `1` ` ` `# Print the result` ` ` `print` `(curr_time)` `# Driver Code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `S ` `=` `"ABACCA"` ` ` `K ` `=` `2` ` ` `findMinimumTime(S, K)` ` ` `# This code is contributed by ukasp.` |

**Output:**

9

**Time Complexity:** O(N)**Auxiliary Space:** O(256)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the **Essential Maths for CP Course** at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**