Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Maximum count of X that can be inserted with no 3 adjacent characters are X

  • Difficulty Level : Expert
  • Last Updated : 01 Nov, 2021

Given a string, str of length N and a character X, the task is to find the maximum count of characters X that are to be inserted into the string such that no three consecutive characters are equal to X. If it is not possible to find such a string, then print -1.

Examples:

Input: str = “xxyxy”, X = X 
Output:
Explanation: 
Insert an ‘x’ at position 4: “xxyxxy”. 
Insert two ‘x’ at position 7: “xxyxxyxx” 
Now no more ‘x’ can be inserted, as it will lead to a size 3 substring with all x in it. 
Hence the required count is 3.

Input:str = “gfg”, X = ‘X’ 
Output: 8

Approach: The idea is to count all the positions where X can be inserted and then subtract the count of already present X in the string. 
Below are the steps:

  1. The maximum number of X that can be inserted in the string is 2 * (N + 1) characters as it is possible to insert two X at the start and end of the string and between every consecutive character.
  2. Now, find the number of groups of consecutive X having a size of 1 or 2 and store it in a variable countX.
  3. The number of X that can be inserted in the given string is 2 * (number of places to be inserted + 1) – number of found Xs.
  4. In conclusion, a simple mathematical formula, 2 * (N + 1) – (N – Xs) can be used to find the final answer.

Below is the implementation of the above approach:

C++14




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Utility function to find maximum count of
// X that are to be inserted into str such that
// no three consecutive characters are equal to X
int maxNumberOfXAddedUtil(string str, char X)
{
 
    // Stores count of consecutive X
    int countX = 0;
 
    // Stores count of characters which
    // is not equal to X
    int countNotX = 0;
 
    // Iterate over characters of string, str
    for (int i = 0; i < str.size(); i++)
    {
 
        // If current character is X
        if (str[i] == X)
        {
 
            // Update  countX
            countX++;
        }
 
        // If countX is less
        // than 3
        else if (countX < 3)
        {
 
            // Update countNotX
            countNotX++;
 
            // Update countX
            countX = 0;
        }
    }
 
    // If countX is greater than
    // or equal to 3
    if (countX >= 3)
        return -1;
    else
        return 2 * (countNotX + 1) - (str.size() - countNotX);
}
 
// Function to find maximum count of X that
// are to be inserted into str such that no
// three consecutive characters are equal to X
static void maxNumberOfXAdded(string str, char X)
{
 
    int ans = maxNumberOfXAddedUtil(str, X);
 
    // Print the answer
    cout << (ans);
}
 
// Driver code
int main()
{
 
    // Given string
    string str = "xxyxy";
 
    char X = 'x';
   
    // Function Call
    maxNumberOfXAdded(str, X);
}
 
// This code is contributed by amreshkumar3.

Java




// Java program for the above approach
 
import java.util.*;
 
public class Main {
 
    // Utility function to find maximum count of
    // X that are to be inserted into str such that
    // no three consecutive characters are equal to X
    static int maxNumberOfXAddedUtil(String str, char X)
    {
 
        // Stores count of consecutive X
        int countX = 0;
 
        // Stores count of characters which
        // is not equal to X
        int countNotX = 0;
 
        // Iterate over characters of string, str
        for (int i = 0; i < str.length(); i++) {
 
            // If current character is X
            if (str.charAt(i) == X) {
 
                // Update  countX
                countX++;
            }
 
            // If countX is less
            // than 3
            else if (countX < 3) {
 
                // Update countNotX
                countNotX++;
 
                // Update countX
                countX = 0;
            }
        }
 
        // If countX is greater than
        // or equal to 3
        if (countX >= 3)
            return -1;
        else
            return 2 * (countNotX + 1)
                - (str.length() - countNotX);
    }
 
    // Function to find maximum count of X that
    // are to be inserted into str such that no
    // three consecutive characters are equal to X
    static void maxNumberOfXAdded(String str, char X)
    {
 
        int ans = maxNumberOfXAddedUtil(str, X);
 
        // Print the answer
        System.out.println(ans);
    }
 
    // Driver Code
    public static void main(String[] args)
    {
 
        // Given string
        String str = "xxyxy";
 
        char X = X;
 
        // Function Call
        maxNumberOfXAdded(str, X);
    }
}

C#




// C# program for the above approach
using System;
 
class GFG{
 
    // Utility function to find maximum count of
    // X that are to be inserted into str such that
    // no three consecutive characters are equal to X
    static int maxNumberOfXAddedUtil(string str, char X)
    {
 
        // Stores count of consecutive X
        int countX = 0;
 
        // Stores count of characters which
        // is not equal to X
        int countNotX = 0;
 
        // Iterate over characters of string, str
        for (int i = 0; i < str.Length; i++) {
 
            // If current character is X
            if (str[i] == X) {
 
                // Update  countX
                countX++;
            }
 
            // If countX is less
            // than 3
            else if (countX < 3) {
 
                // Update countNotX
                countNotX++;
 
                // Update countX
                countX = 0;
            }
        }
 
        // If countX is greater than
        // or equal to 3
        if (countX >= 3)
            return -1;
        else
            return 2 * (countNotX + 1)
                - (str.Length - countNotX);
    }
 
    // Function to find maximum count of X that
    // are to be inserted into str such that no
    // three consecutive characters are equal to X
    static void maxNumberOfXAdded(string str, char X)
    {
 
        int ans = maxNumberOfXAddedUtil(str, X);
 
        // Print the answer
        Console.Write(ans);
    }
 
// Driver Code
public static void Main()
{
     // Given string
        string str = "xxyxy";
 
        char X = 'x';
 
        // Function Call
        maxNumberOfXAdded(str, X);
}
}
 
// This code is contributed by target_2.
Output: 
3

 

Time Complexity: O(N)
Auxiliary Space: O(1)


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!