Skip to content
Related Articles

Related Articles

Improve Article

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

  • Difficulty Level : Expert
  • Last Updated : 03 Aug, 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:

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)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :