Number of subsequences in a given binary string divisible by 2
Last Updated :
10 Mar, 2022
Given binary string str of length N, the task is to find the count of subsequences of str which are divisible by 2. Leading zeros in a sub-sequence are allowed.
Examples:
Input: str = "101"
Output: 2
"0" and "10" are the only subsequences
which are divisible by 2.
Input: str = "10010"
Output: 22
Naive approach: A naive approach will be to generate all possible sub-sequences and check if they are divisible by 2. The time complexity for this will be O(2N * N).
Efficient approach: It can be observed that any binary number is divisible by 2 only if it ends with a 0. Now, the task is to just count the number of subsequences ending with 0. So, for every index i such that str[i] = '0', find the number of subsequences ending at i. This value is equal to 2i (0-based indexing). Thus, the final answer will be equal to the summation of 2i for all i such that str[i] = '0'.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Function to return the count
// of the required subsequences
int countSubSeq(string str, int len)
{
// To store the final answer
int ans = 0;
// Multiplier
int mul = 1;
// Loop to find the answer
for (int i = 0; i < len; i++) {
// Condition to update the answer
if (str[i] == '0')
ans += mul;
// updating multiplier
mul *= 2;
}
return ans;
}
// Driver code
int main()
{
string str = "10010";
int len = str.length();
cout << countSubSeq(str, len);
return 0;
}
Java
// Java implementation of the approach
class GFG
{
// Function to return the count
// of the required subsequences
static int countSubSeq(String str, int len)
{
// To store the final answer
int ans = 0;
// Multiplier
int mul = 1;
// Loop to find the answer
for (int i = 0; i < len; i++)
{
// Condition to update the answer
if (str.charAt(i) == '0')
ans += mul;
// updating multiplier
mul *= 2;
}
return ans;
}
// Driver code
public static void main(String[] args)
{
String str = "10010";
int len = str.length();
System.out.print(countSubSeq(str, len));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 implementation of the approach
# Function to return the count
# of the required subsequences
def countSubSeq(strr, lenn):
# To store the final answer
ans = 0
# Multiplier
mul = 1
# Loop to find the answer
for i in range(lenn):
# Condition to update the answer
if (strr[i] == '0'):
ans += mul
# updating multiplier
mul *= 2
return ans
# Driver code
strr = "10010"
lenn = len(strr)
print(countSubSeq(strr, lenn))
# This code is contributed by Mohit Kumar
C#
// C# implementation of the approach
using System;
class GFG
{
// Function to return the count
// of the required subsequences
static int countSubSeq(string str, int len)
{
// To store the final answer
int ans = 0;
// Multiplier
int mul = 1;
// Loop to find the answer
for (int i = 0; i < len; i++)
{
// Condition to update the answer
if (str[i] == '0')
ans += mul;
// updating multiplier
mul *= 2;
}
return ans;
}
// Driver code
static public void Main ()
{
string str = "10010";
int len = str.Length;
Console.WriteLine(countSubSeq(str, len));
}
}
// This code is contributed by AnkitRai01
JavaScript
<script>
// Javascript implementation of the approach
// Function to return the count
// of the required subsequences
function countSubSeq(str, len)
{
// To store the final answer
var ans = 0;
// Multiplier
var mul = 1;
// Loop to find the answer
for (var i = 0; i < len; i++) {
// Condition to update the answer
if (str[i] == '0')
ans += mul;
// updating multiplier
mul *= 2;
}
return ans;
}
// Driver code
var str = "10010";
var len = str.length;
document.write( countSubSeq(str, len));
</script>
Output:
22
Time Complexity: O(len), where len is the size of the given string
Auxiliary Space: O(1)
Similar Reads
Number of subsequences in a string divisible by n Given a string consisting of digits 0-9, count the number of subsequences in it divisible by m.Examples: Input : str = "1234", n = 4Output : 4The subsequences 4, 12, 24 and 124 are divisible by 4. Input : str = "330", n = 6Output : 4The subsequences 30, 30, 330 and 0 are divisible by n.Input : str =
11 min read
Number of sub-strings in a given binary string divisible by 2 Given binary string str of length N, the task is to find the count of substrings of str which are divisible by 2. Leading zeros in a substring are allowed. Examples: Input: str = "101" Output: 2 "0" and "10" are the only substrings which are divisible by 2. Input: str = "10010" Output: 10 Naive appr
4 min read
Minimum number whose binary form is not a subsequence of given binary string 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:1Explanation: 1 whose binary representation is "1" is the smallest non-negative integer which is not a subseq
8 min read
Number of sub-sequences of non-zero length of a binary string divisible by 3 Given a binary string S of length N, the task is to find the number of sub-sequences of non-zero length which are divisible by 3. Leading zeros in the sub-sequences are allowed.Examples: Input: S = "1001" Output: 5 "11", "1001", "0", "0" and "00" are the only subsequences divisible by 3.Input: S = "
5 min read
Largest sub-string of a binary string divisible by 2 Given binary string str of length N, the task is to find the longest sub-string divisible by 2. If no such sub-string exists then print -1. Examples: Input: str = "11100011" Output: 111000 Largest sub-string divisible by 2 is "111000".Input: str = "1111" Output: -1 There is no sub-string of the give
3 min read