计算二进制字符串中的偶数十进制值子字符串
给定一个大小为 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)