# Minimum number whose binary form is not a subsequence of given binary string

• Last Updated : 17 Jun, 2022

Given a binary string S of size N, the task is to find the minimum non-negative integer which is not a subsequence of the given string S in its binary form.

Examples:

Input: S = “0000”
Output:1
Explanation: 1 whose binary representation is “1” is the smallest non-negative integer which is not a subsequence of the given string in its binary form.

Input: S = “10101”
Output: 8

Approach: The idea is to convert the given string into its decimal representation, say R. Then iterate in the range [0, R] to check for each integer whether it exists or not as a subsequence in its binary form in the given string, S. If not, then break the loop and print the required result.
Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `// Function to check if string str1 is a` `// subsequence of string str2` `bool` `isSubsequence(string str1, string str2, ``int` `m, ``int` `n)` `{` `    ``// Store index of str1` `    ``int` `j = 0;`   `    ``// Traverse str2 and str1, and compare` `    ``// current character of str2 with first` `    ``// unmatched char of str1` `    ``for` `(``int` `i = 0; i < n && j < m; i++)`   `        ``// If matched, move ahead in str1` `        ``if` `(str1[j] == str2[i])` `            ``j++;`   `    ``// If all characters of str1 were` `    ``// found in str2` `    ``return` `(j == m);` `}`   `// Function to find the minimum number which ` `// is not a subsequence of the given binary ` `// string in its binary form` `void` `findMinimumNumber(string s)` `{` `    ``// Store the decimal number of string, S` `    ``int` `r = stoi(s, 0, 2);` `    ``// Initialize the required result` `    ``int` `ans = r + 1;`   `    ``// Iterate in the range [0, R]` `    ``for` `(``int` `i = 0; i <= r; i++) {`   `        ``// Convert integer i to binary string` `        ``string p = ``""``;` `        ``int` `j = i;` `        ``while` `(j > 0) {` `            ``p += to_string(j % 2);` `            ``j = j / 2;` `        ``}`   `        ``int` `m = p.length();` `        ``int` `n = s.length();` `        ``reverse(p.begin(), p.end());`   `        ``// Check if the string is not a subsequence` `        ``if` `(!isSubsequence(p, s, m, n)) {`   `            ``// Update ans and break` `            ``ans = i;` `            ``break``;` `        ``}` `    ``}`   `    ``// Print the required result` `    ``cout << ans;` `}`   `// Driver Code` `int` `main()` `{`   `    ``// Function Call` `    ``string s = ``"10101"``;`   `    ``// Function Call` `    ``findMinimumNumber(s);`   `    ``return` `0;` `}`

## Java

 `// Java program for the above approach` `import` `java.io.*;`   `class` `GFG {`   `    ``// Function to check if string str1 is a` `    ``// subsequence of string str2` `    ``static` `boolean` `isSubsequence(String str1, String str2,` `                                 ``int` `m, ``int` `n)` `    ``{` `        ``// Store index of str1` `        ``int` `j = ``0``;`   `        ``// Traverse str2 and str1, and compare` `        ``// current character of str2 with first` `        ``// unmatched char of str1` `        ``for` `(``int` `i = ``0``; i < n && j < m; i++)` `            ``// If matched, move ahead in str1` `            ``if` `(str1.charAt(j) == str2.charAt(i))` `                ``j++;`   `        ``// If all characters of str1 were found` `        ``// in str2` `        ``return` `(j == m);` `    ``}`   `    ``// Function to find the minimum number which` `    ``// is not a subsequence of the given binary` `    ``// string in its binary form` `    ``static` `void` `findMinimumNumber(String s)` `    ``{` `        ``// Store the decimal number of string, S` `        ``int` `r = Integer.parseInt(s, ``2``);` `        ``// Initialize the required result` `        ``int` `ans = r + ``1``;` `        ``// Iterate in the range [0, R]` `        ``for` `(``int` `i = ``0``; i <= r; i++) {`   `            ``// Convert integer i to binary string` `            ``String p = ``""``;` `            ``int` `j = i;` `            ``while` `(j > ``0``) {` `                ``p += (j % ``2``) + ``""``;` `                ``j = j / ``2``;` `            ``}`   `            ``int` `m = p.length();` `            ``int` `n = s.length();`   `            ``StringBuilder sb = ``new` `StringBuilder(p);` `            ``sb.reverse();` `            ``p = sb.toString();`   `            ``// Check if the string is not a subsequence` `            ``if` `(!isSubsequence(p, s, m, n)) {`   `                ``// Update ans and break` `                ``ans = i;` `                ``break``;` `            ``}` `        ``}` `        ``// Print the required result` `        ``System.out.println(ans);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``// Function Call` `        ``String s = ``"10101"``;`   `        ``// Function Call` `        ``findMinimumNumber(s);` `    ``}` `}` `// This code is contributed by Karandeep1234`

## Python3

 `# python 3 program for the above approach`   `# Function to check if string str1 is a` `# subsequence of string str2` `def` `isSubsequence(str1, str2, m, n):` `    ``# Store index of str1` `    ``j ``=` `0`   `    ``# Traverse str2 and str1, and compare` `    ``# current character of str2 with first` `    ``# unmatched char of str1` `    ``i ``=` `0` `    ``while``(i < n ``and` `j < m):` `        ``# If matched, move ahead in str1` `        ``if` `(str1[j] ``=``=` `str2[i]):` `            ``j ``+``=` `1` `        ``i ``+``=` `1`   `    ``# If all characters of str1 were` `    ``# found in str2` `    ``return` `(j ``=``=` `m)`   `# Function to find the minimum number which ` `# is not a subsequence of the given binary ` `# string in its binary form` `def` `findMinimumNumber(s):` `    ``# Store the decimal number of string, S` `    ``r ``=` `int``(s,``2``)`   `    ``# Initialize the required result` `    ``ans ``=` `r ``+` `1`   `    ``# Iterate in the range [0, R]` `    ``for` `i ``in` `range``(r``+``1``):` `        ``# Convert integer i to binary string` `        ``p ``=` `""` `        ``j ``=` `i` `        ``while` `(j > ``0``):` `            ``p ``+``=` `str``(j ``%` `2``)` `            ``j ``=` `j ``/``/` `2`   `        ``m ``=` `len``(p)` `        ``n ``=` `len``(s)` `        ``p ``=` `p[::``-``1``]`   `        ``# Check if the string is not a subsequence` `        ``if` `(isSubsequence(p, s, m, n) ``=``=` `False``):` `            ``# Update ans and break` `            ``ans ``=` `i` `            ``break`   `    ``# Print the required result` `    ``print``(ans)`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `  `  `    ``# Function Call` `    ``s ``=` `"10101"` `    `  `    ``# Function Call` `    ``findMinimumNumber(s)` `    `  `    ``# This code is contributed by SURENDRA_GANGWAR.`

## C#

 `// C# program for the above approach` `using` `System;` `class` `GFG {` `    ``// Function to check if string str1 is a` `    ``// subsequence of string str2` `    ``static` `bool` `isSubsequence(``string` `str1, ``string` `str2,` `                              ``int` `m, ``int` `n)` `    ``{` `        ``// Store index of str1` `        ``int` `j = 0;`   `        ``// Traverse str2 and str1, and compare` `        ``// current character of str2 with first` `        ``// unmatched char of str1` `        ``for` `(``int` `i = 0; i < n && j < m; i++)`   `            ``// If matched, move ahead in str1` `            ``if` `(str1[j] == str2[i])` `                ``j++;`   `        ``// If all characters of str1 were` `        ``// found in str2` `        ``return` `(j == m);` `    ``}`   `    ``// Function to find the minimum number which` `    ``// is not a subsequence of the given binary` `    ``// string in its binary form` `    ``static` `void` `findMinimumNumber(``string` `s)` `    ``{` `        ``// Store the decimal number of string, S` `        ``int` `r = Int32.Parse(s);` `        ``// Initialize the required result` `        ``int` `ans = r + 1;`   `        ``// Iterate in the range [0, R]` `        ``for` `(``int` `i = 0; i <= r; i++) {`   `            ``// Convert integer i to binary string` `            ``string` `p = ``""``;` `            ``int` `j = i;` `            ``while` `(j > 0) {` `                ``p += (j % 2).ToString();` `                ``j = j / 2;` `            ``}`   `            ``int` `m = p.Length;` `            ``int` `n = s.Length;` `            ``char``[] stringArray = p.ToCharArray();` `            ``Array.Reverse(stringArray);` `            ``p = ``new` `string``(stringArray);`   `            ``// Check if the string is not a subsequence` `            ``if` `(!isSubsequence(p, s, m, n)) {`   `                ``// Update ans and break` `                ``ans = i;` `                ``break``;` `            ``}` `        ``}`   `        ``// Print the required result` `        ``Console.WriteLine(ans);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main()` `    ``{`   `        ``// Function Call` `        ``string` `s = ``"10101"``;`   `        ``// Function Call` `        ``findMinimumNumber(s);` `    ``}` `}`   `// This code is contributed by ukasp.`

Output

`8`

Time Complexity: O(N*R), where R is the decimal representation of the given binary string, S
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up
Recommended Articles
Page :