life is too short for a diary

# Problem Statement

You are given a string s and an integer k, a k duplicate removal consists of choosing k adjacent and equal letters from s and removing them, causing the left and the right side of the deleted substring to concatenate together.

We repeatedly make k duplicate removals on s until we no longer can.

Return the final string after all such duplicate removals have been made. It is guaranteed that the answer is unique1.

All my solutions are uploaded to Github repository

# Testcase

## Example 1

``````Input: s = "abcd", k = 2
Output: "abcd"
Explanation: There's nothing to delete.
``````

## Example 2

``````Input: s = "deeedbbcccbdaa", k = 3
Output: "aa"
Explanation:
First delete "eee" and "ccc", get "ddbbbdaa"
Then delete "bbb", get "dddaa"
Finally delete "ddd", get "aa"
``````

## Example 3

``````Input: s = "pbbcggttciiippooaais", k = 2
Output: "ps"
``````

## Constraints:

• 1 <= s.length <= 105
• 2 <= k <= 104
• s only contains lower case English letters.

# Explanation

1. Use a stack and store a pair of character and its count.
2. Update the count of character if its adjacent.
3. If the count equals to the value of `k` then remove the character.
4. Iterate over the stack to generate the output string.

For example for `Input: s = "deeedbbcccbdaa", k = 3`. # Complexity

Time Complexity: O(N).

Space Complexity: O(N).