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:
- If the string consists all 1s or all 0s, the answer is the given string S itself having period as 1.
- 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++
- Java
- Python3
- C#
- Javascript
C++
// C++ implementation to find the // periodic string with minimum period #include <bits/stdc++.h> using namespace std; // Function to find the periodic string // with minimum period 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) 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 Code int main() { string S = "1111001" ; findPeriodicString(S); return 0; } |
Java
Python3
C#
Javascript
10101010101010
Time Complexity: O(N)
Auxiliary Space: O(2*N)