Open In App

# Periodic Binary String With Minimum Period and a Given Binary String as Subsequence.

Periodic Binary String: A Binary string is called periodic if it can be written as a repetition of a binary string of smaller or same length. For example, 101010 is a periodic binary string with period 10 as we can get the string by repeatedly appending 10 to itself. In general, the string S with period P means, Si is equal to Si + P

Problem: Given a binary string S, the task is to find the periodic string with minimum possible period with the following additional conditions
1) The given string S should be a subsequence of the result
2) Length of the result should not be more than twice the length of input string.

Examples:

Input:S = “01”
Output:0101
Explanation:The output string has period as 2 and has given string as subsequence.

Input :S = “111”
Output :111
Explanation:The output string has period as 1.

Input:S = “110”
Output: 101010
Explanation:The output string has period as 2 and has given string as subsequence. Please note that 110110 is not answer because the period length is more.

Approach:
The main idea depends on two possibilities:

1. If the string consists all 1s or all 0s, the answer is the given string S itself having period as 1.
2. If the string consists of dissimilar elements, find the string with period 2 and having length as twice the length of given string S

Below is the implementation of the above approach:

## C++

 // C++ implementation to find the// periodic string with minimum period#include using namespace std; // Function to find the periodic string// with minimum periodvoid findPeriodicString(string S){    int l = 2 * S.length();     int count = 0;    for (int i = 0; i < S.length(); i++) {        if (S[i] == '1')            count++;    }     // Print the string S if it    // consists of similar elements    if (count == S.length() || count == 0)        cout << S << "\n";     // Find the required periodic    // string with period 2    else {        char arr[l];        for (int i = 0; i < l; i += 2) {            arr[i] = '1';            arr[i + 1] = '0';        }         for (int i = 0; i < l; i++)            cout << arr[i];        cout << "\n";    }} // Driver Codeint main(){    string S = "1111001";    findPeriodicString(S);    return 0;}

## Java

 // Java implementation to find the// periodic string with minimum periodclass GFG{     // Function to find the periodic string// with minimum periodstatic void findPeriodicString(String S){    int l = 2 * S.length();    int count = 0;         for(int i = 0; i < S.length(); i++)    {        if (S.charAt(i) == '1')            count++;    }     // Print the string S if it    // consists of similar elements    if (count == S.length() || count == 0)        System.out.println(S);     // Find the required periodic    // string with period 2    else    {        char arr[] = new char[l];        for(int i = 0; i < l; i += 2)        {            arr[i] = '1';            arr[i + 1] = '0';        }                 for(int i = 0; i < l; i++)            System.out.print(arr[i]);        System.out.println();    }} // Driver Codepublic static void main (String[] args){    String S = "1111001";         findPeriodicString(S);}} // This code is contributed by chitranayal

## Python3

 # Python3 implementation to find the# periodic with minimum period # Function to find the periodic string# with minimum perioddef findPeriodicString(S):    l = 2 * len(S)     count = 0    for i in range(len(S)):        if (S[i] == '1'):            count += 1     # Print the S if it    # consists of similar elements    if (count == len(S) or count == 0):        print(S)     # Find the required periodic    # with period 2    else:        arr = ['0']*l        for i in range(0, l, 2):            arr[i] = '1'            arr[i + 1] = '0'         for i in range(l):            print(arr[i],end="") # Driver Codeif __name__ == '__main__':    S = "1111001"    findPeriodicString(S)     # This code is contributed by mohit kumar 29

## C#

 // C# implementation to find the// periodic string with minimum periodusing System; class GFG{     // Function to find the periodic string// with minimum periodstatic void findPeriodicString(string S){    int l = 2 * S.Length;    int count = 0;         for(int i = 0; i < S.Length; i++)    {        if (S[i] == '1')            count++;    }     // Print the string S if it    // consists of similar elements    if (count == S.Length || count == 0)        Console.WriteLine(S);     // Find the required periodic    // string with period 2    else    {        char[] arr = new char[l];        for(int i = 0; i < l; i += 2)        {            arr[i] = '1';            arr[i + 1] = '0';        }                 for(int i = 0; i < l; i++)            Console.Write(arr[i]);                     Console.WriteLine();    }} // Driver codepublic static void Main (){    string S = "1111001";         findPeriodicString(S);}} // This code is contributed by sanjoy_62

## Javascript



Output:

10101010101010

Time Complexity: O(N)
Auxiliary Space: O(2*N)