Open In App

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

Last Updated : 15 Sep, 2022
Comments
Improve
Suggest changes
Like Article
Like
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)


Next Article

Similar Reads