# Generate Binary String with equal number of 01 and 10 Subsequence

• Difficulty Level : Easy
• Last Updated : 02 Sep, 2022

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++

 `// C++ code to implement the approach`   `#include ` `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

 `// 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`

## Python3

 `# 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#

 `// 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`

## Javascript

 ``

Output

`0110`

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

My Personal Notes arrow_drop_up
Recommended Articles
Page :