life is too short for a diary

Remove-all-adjacent-duplicates-in-string-ii Solution

Tags: leetcode stack python java scala javascript

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


Example 1

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

Example 2

Input: s = "deeedbbcccbdaa", k = 3
Output: "aa"
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"



  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.

stack operation



Time Complexity: O(N).

Space Complexity: O(N).

comments powered by Disqus