Open In App

Minimum characters that are to be inserted such that no three consecutive characters are same

Last Updated : 15 Sep, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given a string str and the task is to modify the string such that no three consecutive characters are the same. In a single operation, any character can be inserted at any position in the string. Find the minimum number of such operations required.

Examples: 

Input : str = “aabbbcc” 
Output:
Explanation: “aabbdbcc” is the modified string.

Input: str = “geeksforgeeks” 
Output:
Explanation: There are no same consecutive characters

Approach:

The idea is to insert the character after the second character to minimize the operations.

Follow the steps below to solve the problem:

  • Loop over the string and check at ith index if str[i] == str[i + 1] and str[i] == str[i + 2]
  • If this condition is true then increment the count.

Below is the implementation of the above approach:

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count of characters
// that are to be inserted in str such that no
// three consecutive characters are same
int getCount(string str, int n)
{
 
    // To store the count of
    // operations required
    int cnt = 0;
 
    int i = 0;
    while (i < n - 2) {
 
        // A character needs to be
        // inserted after str[i + 1]
        if (str[i] == str[i + 1] && str[i] == str[i + 2]) {
            cnt++;
            i = i + 2;
        }
 
        // Current three consecutive
        // characters are not same
        else
            i++;
    }
 
    return cnt;
}
 
// Driver code
int main()
{
    string str = "aabbbcc";
    int n = str.length();
 
    cout << getCount(str, n);
 
    return 0;
}


Java




// Java implementation of the approach
import java.util.*;
 
class GFG {
 
    // Function to return the count of characters
    // that are to be inserted in str such that no
    // three consecutive characters are same
    static int getCount(char[] str, int n)
    {
 
        // To store the count of
        // operations required
        int cnt = 0;
 
        int i = 0;
        while (i < n - 2) {
 
            // A character needs to be
            // inserted after str[i + 1]
            if (str[i] == str[i + 1]
                && str[i] == str[i + 2]) {
                cnt++;
                i = i + 2;
            }
 
            // Current three consecutive
            // characters are not same
            else {
                i++;
            }
        }
        return cnt;
    }
 
    // Driver code
    static public void main(String[] arg)
    {
        String str = "aabbbcc";
        int n = str.length();
 
        System.out.println(getCount(str.toCharArray(), n));
    }
}
 
// This code is contributed by PrinciRaj1992


Python3




# Python3 implementation of the approach
 
# Function to return the count of characters
# that are to be inserted in str1 such that no
# three consecutive characters are same
 
 
def getCount(str1, n):
 
    # To store the count of
    # operations required
    cnt = 0
 
    i = 0
    while (i < n - 2):
 
        # A character needs to be
        # inserted after str1[i + 1]
        if (str1[i] == str1[i + 1] and
                str1[i] == str1[i + 2]):
            cnt += 1
            i = i + 2
 
        # Current three consecutive
        # characters are not same
        else:
            i += 1
 
    return cnt
 
 
# Driver code
str1 = "aabbbcc"
n = len(str1)
 
print(getCount(str1, n))
 
# This code is contributed by Mohit Kumar


C#




// C# implementation of the above approach
using System;
 
class GFG {
 
    // Function to return the count of characters
    // that are to be inserted in str such that no
    // three consecutive characters are same
    static int getCount(string str, int n)
    {
 
        // To store the count of
        // operations required
        int cnt = 0;
 
        int i = 0;
        while (i < n - 2) {
 
            // A character needs to be
            // inserted after str[i + 1]
            if (str[i] == str[i + 1]
                && str[i] == str[i + 2]) {
                cnt++;
                i = i + 2;
            }
 
            // Current three consecutive
            // characters are not same
            else {
                i++;
            }
        }
        return cnt;
    }
 
    // Driver code
    static public void Main()
    {
        string str = "aabbbcc";
        int n = str.Length;
 
        Console.WriteLine(getCount(str, n));
    }
}
 
// This code is contributed by AnkitRai01


Javascript




<script>
      // JavaScript implementation of the above approach
      // Function to return the count of characters
      // that are to be inserted in str such that no
      // three consecutive characters are same
      function getCount(str, n) {
        // To store the count of
        // operations required
        var cnt = 0;
 
        var i = 0;
        while (i < n - 2) {
          // A character needs to be
          // inserted after str[i + 1]
          if (str[i] === str[i + 1] && str[i] === str[i + 2]) {
            cnt++;
            i = i + 2;
          }
 
          // Current three consecutive
          // characters are not same
          else {
            i++;
          }
        }
        return cnt;
      }
 
      // Driver code
      var str = "aabbbcc";
      var n = str.length;
 
      document.write(getCount(str, n));
    </script>


Output

1

Time Complexity: O(N), Traversing over the string of size N.
Auxiliary Space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads