📜  计算二进制字符串中的偶数十进制值子字符串

📅  最后修改于: 2022-05-13 01:57:06.791000             🧑  作者: Mango

计算二进制字符串中的偶数十进制值子字符串

给定一个大小为 N 的二进制字符串。考虑从左到右的二进制到十进制转换,计算所有具有偶数十进制值的子字符串(例如,子字符串“1011”被视为 13)
例子 :

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 

简单的解决方案是一一生成所有子字符串并计算它们的十进制值。至少,返回偶数个十进制值子串的计数。
下面是上述想法的实现。

C++
// C++ code to generate all possible substring
// and count even decimal value substring.
#include 
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
// 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
# 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#
// 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


Javascript


C++
// Program to count all even decimal value substring .
#include 
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
// 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.


Python3
# 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#
// 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


Javascript


输出 :

8

时间复杂度: O(n 3 )
有效的解决方案是基于起始值为 '0' 的子字符串总是产生偶数十进制值的事实。所以我们简单地从左到右遍历一个循环并计算所有起始值为零的子字符串。
下面是上述想法的实现。

C++

// Program to count all even decimal value substring .
#include 
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

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

Python3

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

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


Javascript


]
输出 :

8

时间复杂度: O(n)
空间复杂度: O(1)