Related Articles
Maximum difference of zeros and ones in binary string | Set 2 (O(n) time)
• Difficulty Level : Medium
• Last Updated : 09 Apr, 2021

Given a binary string of 0s and 1s. The task is to find the maximum difference between the number of 0s and number of 1s in any sub-string of the given binary string. That is maximize ( number of 0s – number of 1s ) for any sub-string in the given binary string.
Examples:

```Input : S = "11000010001"
Output : 6
From index 2 to index 9, there are 7
0s and 1 1s, so number of 0s - number
of 1s is 6.

Input : S = "1111"
Output : -1```

We have discussed Dynamic Programing approach in below post :
Maximum difference of zeros and ones in binary string | Set 1
In the post we seen an efficient method that work in O(n) time and in O(1) extra space. Idea behind that if we convert all zeros into 1 and all ones into -1.now our problem reduces to find out the maximum sum sub_array Using Kadane’s Algorithm

```Input : S = "11000010001"
After converting '0' into 1 and
'1' into -1 our S Look Like
S  = -1 -1 1 1 1 1 -1 1 1 1 -1
Now we have to find out Maximum Sum sub_array
that is  : 6 is that case

Output : 6```

Below is the implementation of above idea.

## C++

 `// CPP Program to find the length of``// substring with maximum difference of``// zeros and ones in binary string.``#include ``using` `namespace` `std;` `// Returns the length of substring with``// maximum difference of zeroes and ones``// in binary string``int` `findLength(string str, ``int` `n)``{``    ``int` `current_sum = 0;``    ``int` `max_sum = 0;` `    ``// traverse a binary string from left``    ``// to right``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// add current value to the current_sum``        ``// according to the Character``        ``// if it's '0' add 1 else -1``        ``current_sum += (str[i] == ``'0'` `? 1 : -1);` `        ``if` `(current_sum < 0)``            ``current_sum = 0;` `        ``// update maximum sum``        ``max_sum = max(current_sum, max_sum);``    ``}` `    ``// return -1 if string does not contain``    ``// any zero that means all ones``    ``// otherwise max_sum``    ``return` `max_sum == 0 ? -1 : max_sum;``}` `// Driven Program``int` `main()``{``    ``string s = ``"11000010001"``;``    ``int` `n = 11;``    ``cout << findLength(s, n) << endl;``    ``return` `0;``}`

## Java

 `// Java Program to find the length of``// substring with maximum difference of``// zeroes and ones in binary string.``import` `java.util.*;``import` `java.lang.*;``import` `java.io.*;` `class` `GFG {` `    ``// Find the length of substring with maximum``    ``// difference of zeros and ones in binary``    ``// string``    ``public` `static` `int` `findLength(String str, ``int` `n)``    ``{` `        ``int` `current_sum = ``0``;``        ``int` `max_sum = ``0``;` `        ``// traverse a binary string from left to right``        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``// add current value to the current_sum``            ``// according to the Character``            ``// if it's '0' add 1 else -1``            ``current_sum += (str.charAt(i) == ``'0'` `? ``1` `: -``1``);` `            ``if` `(current_sum < ``0``)``                ``current_sum = ``0``;` `            ``// update maxium sum``            ``max_sum = Math.max(current_sum, max_sum);``        ``}``        ``// return -1 if string does not contain any zero``        ``// that means string contains all ones otherwise max_sum``        ``return` `max_sum == ``0` `? -``1` `: max_sum;``    ``}` `    ``public` `static` `void` `main(String[] args)``    ``{``        ``String str = ``"11000010001"``;``        ``int` `n = str.length();` `        ``System.out.println(findLength(str, n));``    ``}``}`

## Python3

 `# Python Program to find the length of``# substring with maximum difference of``# zeros and ones in binary string.` `# Returns the length of substring with``# maximum difference of zeroes and ones``# in binary string``def` `findLength(string, n):``    ``current_sum ``=` `0``    ``max_sum ``=` `0` `    ``# traverse a binary string from left``    ``# to right``    ``for` `i ``in` `range``(n):` `        ``# add current value to the current_sum``        ``# according to the Character``        ``# if it's '0' add 1 else -1``        ``current_sum ``+``=` `(``1` `if` `string[i] ``=``=` `'0'` `else` `-``1``)` `        ``if` `current_sum < ``0``:``            ``current_sum ``=` `0` `        ``# update maximum sum``        ``max_sum ``=` `max``(current_sum, max_sum)` `    ``# return -1 if string does not contain``    ``# any zero that means all ones``    ``# otherwise max_sum``    ``return` `max_sum ``if` `max_sum ``else` `0` `# Driven Program``s ``=` `"11000010001"``n ``=` `11``print``(findLength(s, n))` `# This code is contributed by Ansu Kumari.`

## C#

 `// C# Program to find the length of``// substring with maximum difference of``// zeroes and ones in binary string.``using` `System;` `class` `GFG``{` `// Find the length of substring with``// maximum difference of zeros and``// ones in binary string``public` `static` `int` `findLength(``string` `str,``                             ``int` `n)``{` `    ``int` `current_sum = 0;``    ``int` `max_sum = 0;` `    ``// traverse a binary string``    ``// from left to right``    ``for` `(``int` `i = 0; i < n; i++)``    ``{` `        ``// add current value to the current_sum``        ``// according to the Character``        ``// if it's '0' add 1 else -1``        ``current_sum += (str[i] == ``'0'` `? 1 : -1);` `        ``if` `(current_sum < 0)``        ``{``            ``current_sum = 0;``        ``}` `        ``// update maxium sum``        ``max_sum = Math.Max(current_sum, max_sum);``    ``}``    ``// return -1 if string does not contain``    ``// any zero that means string contains``    ``// all ones otherwise max_sum``    ``return` `max_sum == 0 ? -1 : max_sum;``}` `// Driver Code``public` `static` `void` `Main(``string``[] args)``{``    ``string` `str = ``"11000010001"``;``    ``int` `n = str.Length;` `    ``Console.WriteLine(findLength(str, n));``}``}` `// This code is contributed by Shrikant13`

## PHP

 ``

## Javascript

 ``

Output:

`6 `

Time Complexity : O(n)
Space complexity : O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up