Number of sub-strings in a given binary string divisible by 2
Last Updated :
25 Aug, 2021
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 approach: A naive approach will be to generate all possible substrings and check if they are divisible by 2. The time complexity for this will be O(N3).
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 substrings ending with 0. So, for every index i such that str[i] = ‘0’, find the number of substrings ending at i. This value is equal to (i + 1) (0-based indexing). Thus, the final answer will be equal to the summation of (i + 1) for all i such that str[i] = ‘0’.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int countSubStr(string str, int len)
{
int ans = 0;
for ( int i = 0; i < len; i++) {
if (str[i] == '0' )
ans += (i + 1);
}
return ans;
}
int main()
{
string str = "10010" ;
int len = str.length();
cout << countSubStr(str, len);
return 0;
}
|
Java
class GFG
{
static int countSubStr(String str, int len)
{
int ans = 0 ;
for ( int i = 0 ; i < len; i++)
{
if (str.charAt(i) == '0' )
ans += (i + 1 );
}
return ans;
}
public static void main (String[] args)
{
String str = "10010" ;
int len = str.length();
System.out.println(countSubStr(str, len));
}
}
|
Python3
def countSubStr(strr, lenn):
ans = 0
for i in range (lenn):
if (strr[i] = = '0' ):
ans + = (i + 1 )
return ans
strr = "10010"
lenn = len (strr)
print (countSubStr(strr, lenn))
|
C#
using System;
class GFG
{
static int countSubStr( string str, int len)
{
int ans = 0;
for ( int i = 0; i < len; i++)
{
if (str[i] == '0' )
ans += (i + 1);
}
return ans;
}
public static void Main ()
{
string str = "10010" ;
int len = str.Length;
Console.WriteLine(countSubStr(str, len));
}
}
|
Javascript
<script>
function countSubStr(str, len)
{
var ans = 0;
for ( var i = 0; i < len; i++) {
if (str[i] == '0' )
ans += (i + 1);
}
return ans;
}
var str = "10010" ;
var len = str.length;
document.write( countSubStr(str, len));
</script>
|
Time Complexity: O(N), N = String length
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...