给定一个二进制字符串str ,任务是通过在任何索引处拆分给定的二进制字符串来最大化左子字符串中的0和右子字符串中的1。最后打印这些0和1的总和。
例子:
Input: str = “0011110011”
Output: 8
Explanation:
If string is splitted at index 2, then Left substring = “00” and Right substring = “11110011”.
Therefore the sum of the count of 0s in left substring and 1s in right substring is 2 + 6 = 8.
Input: str = “0001101111011”
Output: 11
Explanation:
If string is splitted at index 3, then Left substring is “000” and Right substring is “1101111011”.
Therefore the sum of the count of 0s in left substring and 1s in right substring is 3 + 8 = 11.
方法:
- 计算给定二进制字符串str(例如totalOnes )中的个数。
- 遍历给定的字符串,并保持计数0s(例如0 )和1s(例如1 )。
- 在字符串遍历期间,将最大总和更新为:
maxSum = max(maxSum, zero + (totalOnes – one))
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to maximize the sum of the count
// of zeros and ones in the left and right
// substring
int maxSum(string& str)
{
int maximumSum = 0;
// To store the total ones
int totalOnes;
// Count the total numbers of ones
// in string str
totalOnes = count(str.begin(),
str.end(), '1');
// To store the count of zeros and
// ones while traversing string
int zero = 0, ones = 0;
// Interate the given string and
// update the maximum sum
for (int i = 0; str[i]; i++) {
if (str[i] == '0') {
zero++;
}
else {
ones++;
}
// Update the maximum Sum
maximumSum
= max(
maximumSum,
zero + (totalOnes - ones));
}
return maximumSum;
}
// Driver Code
int main()
{
// Given binary string
string str = "011101";
// Function call
cout << maxSum(str);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG {
// Function to maximize the sum
// of the count of zeros and ones
// in the left and right substring
static int maxSum(String str)
{
int maximumSum = 0;
// To store the total ones
int totalOnes = 0;
// Count the total numbers of ones
// in string str
for(int i = 0; i < str.length(); i++)
{
if (str.charAt(i) == '1')
{
totalOnes++;
}
}
// To store the count of zeros and
// ones while traversing string
int zero = 0, ones = 0;
// Interate the given string and
// update the maximum sum
for(int i = 0; i < str.length(); i++)
{
if (str.charAt(i) == '0')
{
zero++;
}
else
{
ones++;
}
// Update the maximum Sum
maximumSum = Math.max(maximumSum,
zero + (totalOnes - ones));
}
return maximumSum;
}
// Driver Code
public static void main(String args[])
{
// Given binary string
String str = "011101";
// Function call
System.out.println(maxSum(str));
}
}
// This code is contributed by rutvik_56
Python3
# Python3 program for the above approach
# Function to maximize the sum of the count
# of zeros and ones in the left and right
# substring
def maxSum(str):
maximumSum = 0
# To store the total ones
# Count the total numbers of ones
# in str
totalOnes = 0
for i in str:
if i == '1':
totalOnes += 1
# To store the count of zeros and
# ones while traversing string
zero = 0
ones = 0
# Interate the given and
# update the maximum sum
i = 0
while i < len(str):
if (str[i] == '0'):
zero += 1
else:
ones += 1
# Update the maximum Sum
maximumSum= max(maximumSum,zero + (totalOnes - ones))
i += 1
return maximumSum
# Driver Code
if __name__ == '__main__':
# Given binary string
str = "011101"
# Function call
print(maxSum(str))
# This code is contributed by mohit kumar 29
C#
// C# program for the above approach
using System;
class GFG{
// Function to maximize the sum
// of the count of zeros and ones
// in the left and right substring
static int maxSum(string str)
{
int maximumSum = 0;
// To store the total ones
int totalOnes = 0;
// Count the total numbers of ones
// in string str
for(int i = 0; i < str.Length; i++)
{
if (str[i] == '1')
{
totalOnes++;
}
}
// To store the count of zeros and
// ones while traversing string
int zero = 0, ones = 0;
// Interate the given string and
// update the maximum sum
for(int i = 0; i < str.Length; i++)
{
if (str[i] == '0')
{
zero++;
}
else
{
ones++;
}
// Update the maximum Sum
maximumSum = Math.Max(maximumSum, zero +
(totalOnes -
ones));
}
return maximumSum;
}
// Driver Code
public static void Main(string []args)
{
// Given binary string
string str = "011101";
// Function call
Console.Write(maxSum(str));
}
}
// This code is contributed by rutvik_56
5
时间复杂度: O(N) ,其中N是字符串的长度。