Open In App

Remove three consecutive duplicates from string

Improve
Improve
Like Article
Like
Save
Share
Report

Given a string, you have to remove the three consecutive duplicates from the string. If no three are consecutive then output the string as it is.

Examples: 

Input : aabbbaccddddc
Output :ccdc
Input :aabbaccddc
Output :aabbaccddc
Recommended Practice

Explanation : 

We insert the characters of string one by one to vector and keep on checking the size of vector. If the size of vector is greater than 2, then we will check whether the last 3 characters of the string are same or not. If the characters are same 

Then we will move three steps backwards in array using resize() else not. 

Implementation:

C++





Java





Python3




<div id="highlighter_38248" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments"># Python3 program to remove three consecutive duplicates </code></div><div class="line number2 index1 alt1"> </div><div class="line number3 index2 alt2"><code class="comments"># function to remove three consecutive duplicates </code></div><div class="line number4 index3 alt1"><code class="keyword">def</code> <code class="plain">remove3ConsecutiveDuplicates(string):</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">    </code><code class="plain">val </code><code class="keyword">=</code> <code class="plain">""</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">    </code><code class="plain">i </code><code class="keyword">=</code> <code class="value">0</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">    </code><code class="keyword">while</code> <code class="plain">(i < </code><code class="functions">len</code><code class="plain">(string)):</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">        </code><code class="keyword">if</code> <code class="plain">(i < </code><code class="functions">len</code><code class="plain">(string) </code><code class="keyword">-</code> <code class="value">2</code> <code class="keyword">and</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">            </code><code class="plain">string[i] </code><code class="keyword">*</code> <code class="value">3</code> <code class="keyword">=</code><code class="keyword">=</code> <code class="plain">string[i:i </code><code class="keyword">+</code> <code class="value">3</code><code class="plain">]):</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">            </code><code class="plain">i </code><code class="keyword">+</code><code class="keyword">=</code> <code class="value">3</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">        </code><code class="keyword">else</code><code class="plain">:</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">            </code><code class="plain">val </code><code class="keyword">+</code><code class="keyword">=</code> <code class="plain">string[i]</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">            </code><code class="plain">i </code><code class="keyword">+</code><code class="keyword">=</code> <code class="value">1</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">            </code> </div><div class="line number15 index14 alt2"><code class="undefined spaces">    </code><code class="keyword">if</code> <code class="plain">(</code><code class="functions">len</code><code class="plain">(val) </code><code class="keyword">=</code><code class="keyword">=</code> <code class="functions">len</code><code class="plain">(string)):</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">        </code><code class="keyword">return</code> <code class="plain">val</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">    </code><code class="keyword">else</code><code class="plain">:</code></div><div class="line number18 index17 alt1"><code class="undefined spaces">        </code><code class="keyword">return</code> <code class="plain">remove3ConsecutiveDuplicates(val)</code></div><div class="line number19 index18 alt2"> </div><div class="line number20 index19 alt1"><code class="comments"># Driver code </code></div><div class="line number21 index20 alt2"><code class="plain">string </code><code class="keyword">=</code> <code class="string">"aabbbaccddddc"</code></div><div class="line number22 index21 alt1"><code class="plain">val </code><code class="keyword">=</code> <code class="plain">remove3ConsecutiveDuplicates(string)</code></div><div class="line number23 index22 alt2"><code class="functions">print</code><code class="plain">(val)</code></div><div class="line number24 index23 alt1"> </div><div class="line number25 index24 alt2"><code class="comments"># This code is contributed by</code></div><div class="line number26 index25 alt1"><code class="comments"># Shubham Singh(SHUBHAMSINGH10)</code></div></div></td></tr></tbody></table></div>


C#




<div id="highlighter_991065" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// C# program to remove three consecutive</code></div><div class="line number2 index1 alt1"><code class="comments">// duplicates</code></div><div class="line number3 index2 alt2"><code class="keyword">using</code> <code class="plain">System;</code></div><div class="line number4 index3 alt1"><code class="keyword">using</code> <code class="plain">System.Collections.Generic;</code></div><div class="line number5 index4 alt2"> </div><div class="line number6 index5 alt1"><code class="keyword">class</code> <code class="plain">GFG </code></div><div class="line number7 index6 alt2"><code class="plain">{</code></div><div class="line number8 index7 alt1"> </div><div class="line number9 index8 alt2"><code class="comments">// function to remove three consecutive</code></div><div class="line number10 index9 alt1"><code class="comments">// duplicates</code></div><div class="line number11 index10 alt2"><code class="keyword">static</code> <code class="keyword">void</code> <code class="plain">remove3ConsecutiveDuplicates(String str)</code></div><div class="line number12 index11 alt1"><code class="plain">{</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">    </code><code class="plain">List<</code><code class="keyword">char</code><code class="plain">> v = </code><code class="keyword">new</code> <code class="plain">List<</code><code class="keyword">char</code><code class="plain">>();</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">    </code><code class="keyword">for</code> <code class="plain">(</code><code class="keyword">int</code> <code class="plain">i = 0; i < str.Length; ++i) </code></div><div class="line number15 index14 alt2"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">        </code><code class="plain">v.Add(str[i]);</code></div><div class="line number17 index16 alt2"> </div><div class="line number18 index17 alt1"><code class="undefined spaces">        </code><code class="keyword">if</code> <code class="plain">(v.Count > 2) </code></div><div class="line number19 index18 alt2"><code class="undefined spaces">        </code><code class="plain">{</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">            </code><code class="keyword">int</code> <code class="plain">sz = v.Count;</code></div><div class="line number21 index20 alt2"> </div><div class="line number22 index21 alt1"><code class="undefined spaces">            </code><code class="comments">// removing three consecutive duplicates</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">            </code><code class="keyword">if</code> <code class="plain">(v[sz - 1] == v[sz - 2] && </code></div><div class="line number24 index23 alt1"><code class="undefined spaces">                </code><code class="plain">v[sz - 2] == v[sz - 3]) </code></div><div class="line number25 index24 alt2"><code class="undefined spaces">            </code><code class="plain">{</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">                </code><code class="plain">v.RemoveRange(sz-3,3); </code><code class="comments">// Removing three characters</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">                                </code><code class="comments">// from the string</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">            </code><code class="plain">}</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">        </code><code class="plain">}</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number31 index30 alt2"> </div><div class="line number32 index31 alt1"><code class="undefined spaces">    </code><code class="comments">// printing the string final string</code></div><div class="line number33 index32 alt2"><code class="undefined spaces">    </code><code class="keyword">for</code> <code class="plain">(</code><code class="keyword">int</code> <code class="plain">i = 0; i < v.Count; ++i)</code></div><div class="line number34 index33 alt1"><code class="undefined spaces">        </code><code class="plain">Console.Write(v[i]);</code></div><div class="line number35 index34 alt2"><code class="plain">}</code></div><div class="line number36 index35 alt1"> </div><div class="line number37 index36 alt2"><code class="comments">// Driver code</code></div><div class="line number38 index37 alt1"><code class="keyword">public</code> <code class="keyword">static</code> <code class="keyword">void</code> <code class="plain">Main(String[] args) </code></div><div class="line number39 index38 alt2"><code class="plain">{</code></div><div class="line number40 index39 alt1"><code class="undefined spaces">    </code><code class="plain">String str = </code><code class="string">"aabbbaccddddc"</code><code class="plain">;</code></div><div class="line number41 index40 alt2"><code class="undefined spaces">    </code><code class="plain">remove3ConsecutiveDuplicates(str);</code></div><div class="line number42 index41 alt1"><code class="plain">}</code></div><div class="line number43 index42 alt2"><code class="plain">}</code></div><div class="line number44 index43 alt1"> </div><div class="line number45 index44 alt2"><code class="comments">// This code has been contributed by 29AjayKumar</code></div></div></td></tr></tbody></table></div>


Javascript




<div id="highlighter_106510" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="plain"><script></code></div><div class="line number2 index1 alt1"><code class="comments">// Javascript program to remove three consecutive</code></div><div class="line number3 index2 alt2"><code class="comments">// duplicates</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="comments">// function to remove three consecutive</code></div><div class="line number6 index5 alt1"><code class="comments">// duplicates</code></div><div class="line number7 index6 alt2"><code class="keyword">function</code> <code class="plain">remove3ConsecutiveDuplicates(str)</code></div><div class="line number8 index7 alt1"><code class="plain">{</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">    </code><code class="plain">let v = [];</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">    </code><code class="keyword">for</code> <code class="plain">(let i = 0; i < str.length; ++i) </code></div><div class="line number11 index10 alt2"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">        </code><code class="plain">v.push(str[i]);</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">  </code> </div><div class="line number14 index13 alt1"><code class="undefined spaces">        </code><code class="keyword">if</code> <code class="plain">(v.length > 2) </code></div><div class="line number15 index14 alt2"><code class="undefined spaces">        </code><code class="plain">{</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">            </code><code class="plain">let sz = v.length;</code></div><div class="line number17 index16 alt2"><code class="undefined spaces">  </code> </div><div class="line number18 index17 alt1"><code class="undefined spaces">            </code><code class="comments">// removing three consecutive duplicates</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">            </code><code class="keyword">if</code> <code class="plain">(v[sz - 1] == v[sz - 2] && </code></div><div class="line number20 index19 alt1"><code class="undefined spaces">                </code><code class="plain">v[sz - 2] == v[sz - 3]) </code></div><div class="line number21 index20 alt2"><code class="undefined spaces">            </code><code class="plain">{</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">                </code><code class="plain">v.pop();</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">                </code><code class="plain">v.pop();</code></div><div class="line number24 index23 alt1"><code class="undefined spaces">                </code><code class="plain">v.pop();</code></div><div class="line number25 index24 alt2"><code class="undefined spaces">                </code><code class="comments">// Removing three characters</code></div><div class="line number26 index25 alt1"><code class="undefined spaces">                                </code><code class="comments">// from the string</code></div><div class="line number27 index26 alt2"><code class="undefined spaces">            </code><code class="plain">}</code></div><div class="line number28 index27 alt1"><code class="undefined spaces">        </code><code class="plain">}</code></div><div class="line number29 index28 alt2"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number30 index29 alt1"><code class="undefined spaces">  </code> </div><div class="line number31 index30 alt2"><code class="undefined spaces">    </code><code class="comments">// printing the string final string</code></div><div class="line number32 index31 alt1"><code class="undefined spaces">    </code><code class="keyword">for</code> <code class="plain">(let i = 0; i < v.length; ++i)</code></div><div class="line number33 index32 alt2"><code class="undefined spaces">        </code><code class="plain">document.write(v[i]);</code></div><div class="line number34 index33 alt1"><code class="plain">}</code></div><div class="line number35 index34 alt2"> </div><div class="line number36 index35 alt1"><code class="comments">// Driver code</code></div><div class="line number37 index36 alt2"><code class="plain">let str = </code><code class="string">"aabbbaccddddc"</code><code class="plain">;</code></div><div class="line number38 index37 alt1"><code class="plain">remove3ConsecutiveDuplicates(str);</code></div><div class="line number39 index38 alt2"> </div><div class="line number40 index39 alt1"><code class="comments">// This code is contributed by rag2127</code></div><div class="line number41 index40 alt2"><code class="plain"></script></code></div></div></td></tr></tbody></table></div>


PHP




<?php
// PHP program to remove three consecutive
// duplicates
 
// function to remove three consecutive
// duplicates
function remove3ConsecutiveDuplicates($str)
{
    $v = array();
    for ($i = 0; $i < strlen($str); ++$i)
    {
        array_push($v, $str[$i]);
 
        if (count($v) > 2)
        {
            $sz = count($v);
 
            // removing three consecutive duplicates
            if ($v[$sz - 1] == $v[$sz - 2] &&
                $v[$sz - 2] == $v[$sz - 3])
            {
                array_pop($v);
                array_pop($v);
                array_pop($v);
                // Removing three characters
                                // from the string
            }
        }
    }
 
    // printing the string final string
    for ($i = 0; $i < count($v); ++$i)
        echo $v[$i];
}
 
    // Driver code
    $str = "aabbbaccddddc";
 
    remove3ConsecutiveDuplicates($str);
 
// This code is contributed by mits
?>


Output

ccdc














Time Complexity: O(n)
Auxiliary Space: O(n)

This article is contributed by Roshni Agarwal.  

Approach#2:using re

Algorithm

1. Use the re library to search for any sequence of 3 consecutive identical characters in the input string.
2. Replace any matches with an empty string.
3. Repeat step 1 and 2 until no matches are found.

C++





Java





Python3




<div id="highlighter_29404" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">import</code> <code class="plain">re</code></div><div class="line number2 index1 alt1"> </div><div class="line number3 index2 alt2"><code class="keyword">def</code> <code class="plain">remove_consecutive_duplicates(input_str):</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">    </code><code class="plain">pattern </code><code class="keyword">=</code> <code class="plain">r</code><code class="string">'(\w)\1{2}'</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">    </code><code class="plain">match </code><code class="keyword">=</code> <code class="plain">re.search(pattern, input_str)</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">    </code><code class="keyword">while</code> <code class="plain">match:</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">        </code><code class="plain">input_str </code><code class="keyword">=</code> <code class="plain">re.sub(pattern, '', input_str)</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">        </code><code class="plain">match </code><code class="keyword">=</code> <code class="plain">re.search(pattern, input_str)</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">    </code><code class="keyword">return</code> <code class="plain">input_str</code></div><div class="line number10 index9 alt1"><code class="plain">input_str </code><code class="keyword">=</code> <code class="string">"aabbbaccddddc"</code></div><div class="line number11 index10 alt2"><code class="functions">print</code><code class="plain">(remove_consecutive_duplicates(input_str))</code></div></div></td></tr></tbody></table></div>


C#




<div id="highlighter_821283" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="keyword">using</code> <code class="plain">System;</code></div><div class="line number2 index1 alt1"><code class="keyword">using</code> <code class="plain">System.Text.RegularExpressions;</code></div><div class="line number3 index2 alt2"> </div><div class="line number4 index3 alt1"><code class="keyword">class</code> <code class="plain">GFG {</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">    </code><code class="keyword">static</code> <code class="keyword">string</code></div><div class="line number6 index5 alt1"><code class="undefined spaces">    </code><code class="plain">RemoveConsecutiveDuplicates(</code><code class="keyword">string</code> <code class="plain">inputStr)</code></div><div class="line number7 index6 alt2"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">        </code><code class="keyword">string</code> <code class="plain">pattern = </code><code class="string">@"(\w)\1{2}"</code><code class="plain">;</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">        </code><code class="plain">Match match = Regex.Match(inputStr, pattern);</code></div><div class="line number10 index9 alt1"><code class="undefined spaces">        </code><code class="keyword">while</code> <code class="plain">(match.Success) {</code></div><div class="line number11 index10 alt2"><code class="undefined spaces">            </code><code class="plain">inputStr = Regex.Replace(inputStr, pattern,</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">                                     </code><code class="keyword">string</code><code class="plain">.Empty);</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">            </code><code class="plain">match = Regex.Match(inputStr, pattern);</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">        </code><code class="plain">}</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">        </code><code class="keyword">return</code> <code class="plain">inputStr;</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number17 index16 alt2"> </div><div class="line number18 index17 alt1"><code class="undefined spaces">    </code><code class="keyword">static</code> <code class="keyword">void</code> <code class="plain">Main()</code></div><div class="line number19 index18 alt2"><code class="undefined spaces">    </code><code class="plain">{</code></div><div class="line number20 index19 alt1"><code class="undefined spaces">        </code><code class="keyword">string</code> <code class="plain">inputStr = </code><code class="string">"aabbbaccddddc"</code><code class="plain">;</code></div><div class="line number21 index20 alt2"><code class="undefined spaces">        </code><code class="plain">Console.WriteLine(</code></div><div class="line number22 index21 alt1"><code class="undefined spaces">            </code><code class="plain">RemoveConsecutiveDuplicates(inputStr));</code></div><div class="line number23 index22 alt2"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number24 index23 alt1"><code class="plain">}</code></div></div></td></tr></tbody></table></div>


Javascript




<div id="highlighter_157476" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// Function to remove consecutive duplicates from a string</code></div><div class="line number2 index1 alt1"><code class="keyword">function</code> <code class="plain">removeConsecutiveDuplicates(input_str) {</code></div><div class="line number3 index2 alt2"><code class="undefined spaces">    </code><code class="comments">// Regular expression pattern to match consecutive</code></div><div class="line number4 index3 alt1"><code class="undefined spaces">    </code><code class="comments">// duplicate characters</code></div><div class="line number5 index4 alt2"><code class="undefined spaces">    </code><code class="plain">const pattern = /(.)\1{2}/g;</code></div><div class="line number6 index5 alt1"> </div><div class="line number7 index6 alt2"><code class="undefined spaces">    </code><code class="comments">// Find the first match of the pattern in the input</code></div><div class="line number8 index7 alt1"><code class="undefined spaces">    </code><code class="comments">// string</code></div><div class="line number9 index8 alt2"><code class="undefined spaces">    </code><code class="plain">let found = input_str.match(pattern);</code></div><div class="line number10 index9 alt1"> </div><div class="line number11 index10 alt2"><code class="undefined spaces">    </code><code class="comments">// While there are consecutive duplicates found, remove</code></div><div class="line number12 index11 alt1"><code class="undefined spaces">    </code><code class="comments">// them from the string</code></div><div class="line number13 index12 alt2"><code class="undefined spaces">    </code><code class="keyword">while</code> <code class="plain">(found) {</code></div><div class="line number14 index13 alt1"><code class="undefined spaces">        </code><code class="plain">input_str = input_str.replace(pattern, </code><code class="string">""</code><code class="plain">);</code></div><div class="line number15 index14 alt2"><code class="undefined spaces">        </code><code class="plain">found = input_str.found(pattern);</code></div><div class="line number16 index15 alt1"><code class="undefined spaces">    </code><code class="plain">}</code></div><div class="line number17 index16 alt2"> </div><div class="line number18 index17 alt1"><code class="undefined spaces">    </code><code class="keyword">return</code> <code class="plain">input_str;</code></div><div class="line number19 index18 alt2"><code class="plain">}</code></div><div class="line number20 index19 alt1"> </div><div class="line number21 index20 alt2"><code class="plain">const input_str = </code><code class="string">"aabbbaccddddc"</code><code class="plain">;</code></div><div class="line number22 index21 alt1"><code class="plain">const result = removeConsecutiveDuplicates(input_str);</code></div><div class="line number23 index22 alt2"><code class="plain">console.log(result);</code></div></div></td></tr></tbody></table></div>


Output

ccdc







Time Complexity: O(n^2), where n is the length of the input string. This is because we could potentially iterate over the entire string multiple times (once for each match).
Space Complexity: O(n), where n is the length of the input string. This is because we need to store the input string and any intermediate regular expression matches..

Approach: Using Dynamic Programming

  • Define a dynamic programming desk, dp, with a size of n (the period of the enter string). Each access dp[i] will constitute the minimal variety of characters required to form the string with out 3 consecutive duplicates, considering the substring up to index i (inclusive).
  • Initialize dp[0] as 1, because the minimum wide variety of characters required to form a string of length 1 is 1.
    Iterate from index 1 to n-1 to fill the dynamic programming table:                                                                                      a. If the current person, str[i], isn’t like the previous person, str[i-1], then we will append str[i] to the result without introducing three consecutive duplicates. Therefore, dp[i] = dp[i-1]   1.                                                                               b. If the modern-day character, str[i], is the same as the preceding man or woman, str[i-1], we need to don’t forget  instances:
  • If the previous two characters, str[i-1] and str[i-2], also are the same, we can not append str[i] to the result as it might introduce 3 consecutive duplicates. In this case, dp[i] = dp[i-1].
  • If the previous two characters, str[i-1] and str[i-2], are distinct, we can append str[i] to the end result with out introducing three consecutive duplicates. In this example, dp[i] = dp[i-2]   1.
    The final answer can be the string fashioned through considering the characters up to index n-1 of the enter string, aside from any characters which have a corresponding dp[i] price more than or identical to 3.
     

C++





Java





Python3





C#





Javascript




function removeConsecutiveDuplicates(str) {
    const n = str.length;
    const dp = new Array(n); // Dynamic programming table to track consecutive duplicate counts
    dp[0] = 1;
 
    let result = str[0];
 
    for (let i = 1; i < n; i++) {
        // If the current character is the same as the previous one,
        // increment the count in the dynamic programming table
        if (str[i] === str[i - 1]) {
            dp[i] = dp[i - 1] + 1;
        } else {
            dp[i] = 1;
        }
 
        // Append the current character to the result string
        result += str[i];
 
        // If the count reaches three, remove the last three characters
        if (dp[i] === 3) {
            result = result.slice(0, -3);
        }
    }
 
    return result;
}
 
const str1 = "aabbbaccddddc";
const result1 = removeConsecutiveDuplicates(str1);
console.log("Input: " + str1);
console.log("Output: " + result1);
 
const str2 = "aabbaccddc";
const result2 = removeConsecutiveDuplicates(str2);
console.log("Input: " + str2);
console.log("Output: " + result2);


Output

Input: aabbbaccddddc
Output: aaaccdc
Input: aabbaccddc
Output: aabbaccddc














Time Complexity: O(n), where n is the length of the input String.

Auxiliary Space: O(n), dp table requires O(n) space to store the count of consecutive duplicates. In worst case, the space complexity will be near about O(n), where n is the length of the input String.



Last Updated : 28 Oct, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads