Given an integer N (N > 2), the task is to generate a binary string of size N that consists of equal numbers of “10” & “01” subsequences and also the string should contain at least one ‘0’ and one ‘1’
Note: If multiple such strings exist, print any.
Examples:
Input: 4
Output: 0110
Explanation : Here, 0110 string consists equal count of ’01’ and ’10’
subsequence and it consists at least one occurrence of 0 as well as 1.Input: 3
Output: 010
Explanation : Here, 010 string consists equal count of ’01’ and ’10’
subsequence and it consists at least one occurrence of 0 as well as 1.
Naive approach:
The idea is to generate every possible binary string(string which consists of only 0’s and 1’s) and find a substring with equal number of ’01’ and ’10’ subsequence.
Time Complexity: O(2N * 2N) = O(4N) because each string also has 2N subsequences.
Auxiliary Space: O(N)
Efficient approach: To solve the problem follow the below observations:
Case 1 (If N is even): Then add 1s at N/2 and (N/2 – 1) index, and add 0s to the rest of the string. So the count of ’10’ and ’01’ will be same which is equal to 2*(N/2 – 1) = (N – 2) and string also consists of at least once occurrence of 0 and 1.
For example:
- If N = 4, that means N is even, then add 1 at index N/2 =2 and (N/2)-1 = 1 .
- And add 0s at remaining positions from 0 to 3 .
- Hence, string is “0110”.
Case 2 (If N is odd): Then add 1s at middle and add 0s to the rest of the string. So the count of ’10’ and ’01’ is same which is equal to N/2 and string also consists at least once occurrence of 0 and 1.
For example:
- If N=3, that means N is odd then add 1 at index N/2=1.
- And add 0s at remaining positions from 0 to 2.
- Hence, string is “010”.
Follow the below steps to implement the above approach:
- Take an empty string s.
- Now check if N is even or odd:
- If N is even, iterate from 0 to N – 1 and add ‘1’ only at the N/2 and (N/2 – 1) index and ‘0’ on the other indices of the string.
- If N is odd, iterate from 0 to N-1 and add ‘1’ only at the N/2 index and ‘0’ in all other indices of the string.
- Now, return the constructed string.
Below is the implementation of the above approach.
// C++ code to implement the approach #include <bits/stdc++.h> using namespace std;
string makeString( int n)
{ string s = "" ;
// If n is even then follow this block
int mid = n / 2;
if (n % 2 == 0) {
for ( int i = 0; i < n; i++) {
// If i is at middle of n and
// previous middle of n
// then add 1 into the string
if (i == mid || i == mid - 1) {
s += "1" ;
}
// Otherwise, add 0 to the string
else {
s += "0" ;
}
}
}
// If n is odd then follow this block
else {
for ( int i = 0; i < n; i++) {
// If i is equal to mid then
// add 1 to the string
if (i == mid) {
s += "1" ;
}
// Otherwise add 0 to the string
else {
s += "0" ;
}
}
// Return the constructed string
return s;
}
} // Driver code int main()
{ int N = 4;
// Function call
cout << makeString(N);
return 0;
} |
// Java code to implement the approach import java.util.*;
class GFG{
static String makeString( int n)
{ String s = "" ;
// If n is even then follow this block
int mid = n / 2 ;
if (n % 2 == 0 ) {
for ( int i = 0 ; i < n; i++) {
// If i is at middle of n and
// previous middle of n
// then add 1 into the String
if (i == mid || i == mid - 1 ) {
s += "1" ;
}
// Otherwise, add 0 to the String
else {
s += "0" ;
}
}
}
// If n is odd then follow this block
else {
for ( int i = 0 ; i < n; i++) {
// If i is equal to mid then
// add 1 to the String
if (i == mid) {
s += "1" ;
}
// Otherwise add 0 to the String
else {
s += "0" ;
}
}
// Return the constructed String
return s;
}
return s;
} // Driver code public static void main(String[] args)
{ int N = 4 ;
// Function call
System.out.print(makeString(N));
} } // This code contributed by shikhasingrajput |
# Python code to implement the approach def makeString(n):
s = ""
# If n is even then follow this block
mid = n / 2
if (n % 2 = = 0 ):
for i in range (n):
# If i is at middle of n and previous
# middle of n then add 1 into the string
if (i = = mid or i = = mid - 1 ):
s + = "1"
# Otherwise, add 0 to the string.
else :
s + = "0"
# If n is odd then follow this block
else :
for i in range (n):
# If i is equal to mid then add 1 to the string
if i = = mid:
s + = "1"
# Otherwise add 0 to the string
else :
s + = "0"
# Return the constructed String
return s
return s
N = 4
# Function call print (makeString(N))
# This code is contributed by lokeshmvs21. |
// C# code to implement the approach using System;
public class GFG{
static String makeString( int n)
{ string s = "" ;
// If n is even then follow this block
int mid = n / 2;
if (n % 2 == 0) {
for ( int i = 0; i < n; i++) {
// If i is at middle of n and
// previous middle of n
// then add 1 into the String
if (i == mid || i == mid - 1) {
s += "1" ;
}
// Otherwise, add 0 to the String
else {
s += "0" ;
}
}
}
// If n is odd then follow this block
else {
for ( int i = 0; i < n; i++) {
// If i is equal to mid then
// add 1 to the String
if (i == mid) {
s += "1" ;
}
// Otherwise add 0 to the String
else {
s += "0" ;
}
}
// Return the constructed String
return s;
}
return s;
} // Driver code public static void Main( string [] args)
{ int N = 4;
// Function call
Console.WriteLine(makeString(N));
} } // This code contributed by AnkThon |
<script> // Javascript program for above approach function makeString(n)
{ let s = "" ;
// If n is even then follow this block
let mid = n / 2;
if (n % 2 == 0) {
for (let i = 0; i < n; i++) {
// If i is at middle of n and
// previous middle of n
// then add 1 into the String
if (i == mid || i == mid - 1) {
s += "1" ;
}
// Otherwise, add 0 to the String
else {
s += "0" ;
}
}
}
// If n is odd then follow this block
else {
for (let i = 0; i < n; i++) {
// If i is equal to mid then
// add 1 to the String
if (i == mid) {
s += "1" ;
}
// Otherwise add 0 to the String
else {
s += "0" ;
}
}
// Return the constructed String
return s;
}
return s;
} // Driver Code let N = 4;
// Function call
document.write(makeString(N));
// This code is contributed by code_hunt.
</script> |
0110
Time Complexity: O(N)
Auxiliary Space: O(N)