Given a binary string of size N. Count all substring that have even decimal value considering binary to decimal conversion from left to right (For example a substring “1011” is treated as 13)
Examples :
Input : 101
Output : 2
Explanation :
Substring are : 1, 10, 101, 0, 01, 1
In decimal form : 1, 1, 3, 0, 2, 1
There are only 2 even decimal value substring.Input : 10010
Output : 8
Simple Solution is to one-by-one generate all sub-string and compute their decimal values. At least, return count of even decimal value substring.
Below is the implementation of above idea.
// C++ code to generate all possible substring // and count even decimal value substring. #include <bits/stdc++.h> using namespace std;
// generate all substring in arr[0..n-1] int evenDecimalValue(string str, int n)
{ // store the count
int result = 0;
// Pick starting point
for ( int i = 0; i < n; i++) {
// Pick ending point
for ( int j = i; j < n; j++) {
int decimalValue = 0;
int powerOf2 = 1;
// substring between current starting
// and ending points
for ( int k = i; k <= j; k++) {
decimalValue += ((str[k] - '0' ) * powerOf2);
// increment power of 2 by one
powerOf2 *= 2;
}
if (decimalValue % 2 == 0)
result++;
}
}
return result;
} // Driver program int main()
{ string str = "10010" ;
int n = 5;
cout << evenDecimalValue(str, n) << endl;
return 0;
} |
// Java Program to count all even // decimal value substring . import java.io.*;
class GFG
{ // generate all substring in arr[0..n-1]
static int evenDecimalValue(String str, int n)
{
// store the count
int result = 0 ;
// Pick starting point
for ( int i = 0 ; i < n; i++)
{
// Pick ending point
for ( int j = i; j < n; j++)
{
int decimalValue = 0 ;
int powerOf2 = 1 ;
// substring between current
// starting and ending points
for ( int k = i; k <= j; k++)
{
decimalValue += ((str.charAt(k) -
'0' ) * powerOf2);
// increment power of 2 by one
powerOf2 *= 2 ;
}
if (decimalValue % 2 == 0 )
result++;
}
}
return result;
}
// Driver code
public static void main (String[] args)
{
String str = "10010" ;
int n = 5 ;
System.out.println(evenDecimalValue(str, n));
}
} //This code is contributed by Gitanjali. |
# Python3 Program to count all even # decimal value substring import math
# Generate all substring in arr[0..n-1] def evenDecimalValue( str , n) :
# Store the count
result = 0
# Pick starting point
for i in range ( 0 , n) :
# Pick ending point
for j in range (i, n):
decimalValue = 0 ;
powerOf2 = 1 ;
# Substring between current
# starting and ending points
for k in range (i, j + 1 ) :
decimalValue + = (( int ( str [k]) - 0 ) * powerOf2)
# increment power of 2 by one
powerOf2 * = 2
if (decimalValue % 2 = = 0 ):
result + = 1
return result
# Driver code str = "10010"
n = 5
print (evenDecimalValue( str , n))
# This code is contributed by Gitanjali. |
// C# Program to count all even // decimal value substring . using System;
class GFG
{ // generate all substring in arr[0..n-1]
static int evenDecimalValue( string str, int n)
{
// store the count
int result = 0;
// Pick starting point
for ( int i = 0; i < n; i++)
{
// Pick ending point
for ( int j = i; j < n; j++)
{
int decimalValue = 0;
int powerOf2 = 1;
// substring between current
// starting and ending points
for ( int k = i; k <= j; k++)
{
decimalValue += ((str[k] -
'0' ) * powerOf2);
// increment power of 2 by one
powerOf2 *= 2;
}
if (decimalValue % 2 == 0)
result++;
}
}
return result;
}
// Driver code
public static void Main ()
{
String str = "10010" ;
int n = 5;
Console.WriteLine(evenDecimalValue(str, n));
}
} // This code is contributed by vt_m. |
<?php // PHP code to generate all // possible substring and // count even decimal value // substring // generate all substring // in arr[0..n-1] function evenDecimalValue( $str , $n )
{ // store the count
$result = 0;
// Pick starting point
for ( $i = 0; $i < $n ; $i ++)
{
// Pick ending point
for ( $j = $i ; $j < $n ; $j ++)
{
$decimalValue = 0;
$powerOf2 = 1;
// substring between current
// starting and ending points
for ( $k = $i ; $k <= $j ; $k ++)
{
$decimalValue += (( $str [ $k ] - '0' ) *
$powerOf2 );
// increment power of 2 by one
$powerOf2 *= 2;
}
if ( $decimalValue % 2 == 0)
$result ++;
}
}
return $result ;
} // Driver Code $str = "10010" ;
$n = 5;
echo evenDecimalValue( $str , $n );
// This code is contributed by anuj_67. ?> |
<script> // javascript code to generate all possible substring // and count even decimal value substring. // generate all substring in arr[0..n-1] function evenDecimalValue(str, n)
{ // store the count
var result = 0;
// Pick starting point
for ( var i = 0; i < n; i++) {
// Pick ending point
for ( var j = i; j < n; j++) {
var decimalValue = 0;
var powerOf2 = 1;
// substring between current starting
// and ending points
for ( var k = i; k <= j; k++) {
decimalValue += ((str[k] - '0' ) * powerOf2);
// increment power of 2 by one
powerOf2 *= 2;
}
if (decimalValue % 2 == 0)
result++;
}
}
return result;
} // Driver program var str = "10010" ;
var n = 5;
document.write( evenDecimalValue(str, n) ); // This code is contributed by rrrtnx. </script> |
8
Time Complexity: O(n3).
Auxiliary Space: O(1)
Efficient solution is based on the fact that substring whose starting value is ‘0’ always produce even decimal value. so we simply traverse a loop from left to right and count all substring whose starting value is zero.
Below is the implementation of above idea.
// Program to count all even decimal value substring . #include <bits/stdc++.h> using namespace std;
// function return count of even decimal // value substring int evenDecimalValue(string str, int n)
{ // store the count of even decimal value substring
int result = 0;
for ( int i = 0; i < n; i++) {
// substring started with '0'
if (str[i] == '0' ) {
// increment result by (n-i)
// because all substring which are generate by
// this character produce even decimal value.
result += (n - i);
}
}
return result;
} // Driver program int main()
{ string str = "10010" ;
int n = 5;
cout << evenDecimalValue(str, n) << endl;
return 0;
} |
// Java Program to count all even // decimal value substring . import java.io.*;
class GFG
{ // function return count of
// even decimal value substring
static int evenDecimalValue(String str, int n)
{
// store the count of even
// decimal value substring
int result = 0 ;
for ( int i = 0 ; i < n; i++)
{
// substring started with '0'
if (str.charAt(i) == '0' )
{
// increment result by (n-i)
// because all substring which
// are generate by this character
// produce even decimal value.
result += (n - i);
}
}
return result;
}
// Driver code
public static void main(String[] args)
{
String str = "10010" ;
int n = 5 ;
System.out.println(evenDecimalValue(str, n));
}
} // This code is contributed // by Gitanjali. |
# Python Program to count all even # decimal value substring # Function return count of even # decimal value substring def evenDecimalValue( str , n) :
# Store the count of even
# decimal value substring
result = 0
for i in range ( 0 , n):
# substring started with '0'
if ( str [i] = = '0' ):
# increment result by (n-i)
# because all substring which are generate by
# this character produce even decimal value.
result + = (n - i)
return result
# Driver code str = "10010"
n = 5
print (evenDecimalValue( str , n))
# This code is contributed by Gitanjali. |
// C# Program to count all even // decimal value substring . using System;
class GFG
{ // function return count of
// even decimal value substring
static int evenDecimalValue( string str, int n)
{
// store the count of even
// decimal value substring
int result = 0;
for ( int i = 0; i < n; i++)
{
// substring started with '0'
if (str[i] == '0' )
{
// increment result by (n-i)
// because all substring which
// are generate by this character
// produce even decimal value.
result += (n - i);
}
}
return result;
}
// Driver code
public static void Main()
{
string str = "10010" ;
int n = 5;
Console.WriteLine(evenDecimalValue(str, n));
}
} // This code is contributed // by vt_m. |
<?php // PHP Program to count all // even decimal value substring . // function return count of // even decimal value substring function evenDecimalValue( $str , $n )
{ // store the count of even
// decimal value substring
$result = 0;
for ( $i = 0; $i < $n ; $i ++)
{
// substring started with '0'
if ( $str [ $i ] == '0' )
{
// increment result by (n-i)
// because all substring which
// are generated by this character
// produce even decimal value.
$result += ( $n - $i );
}
}
return $result ;
} // Driver Code $str = "10010" ;
$n = 5;
echo evenDecimalValue( $str , $n ) ;
return 0;
// This code is contributed by SanjuTomar. ?> |
<script> // Javascript Program to count all even
// decimal value substring .
// function return count of
// even decimal value substring
function evenDecimalValue(str, n)
{
// store the count of even
// decimal value substring
let result = 0;
for (let i = 0; i < n; i++)
{
// substring started with '0'
if (str[i] == '0' )
{
// increment result by (n-i)
// because all substring which
// are generate by this character
// produce even decimal value.
result += (n - i);
}
}
return result;
}
let str = "10010" ;
let n = 5;
document.write(evenDecimalValue(str, n));
// This code is contributed by divyeshrabadiya07.
</script> |
8
Time Complexity: O(n)
Space complexity: O(1)