- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Maximum difference of zeros and ones in binary string - (O(n) time) in C++
Given the task is to find a sub-string from a given binary string and then the maximum difference between the number of zeroes and the ones.
Let’s now understand what we have to do using an example −
Input
str = “10010110”
Output
2
Explanation
In the sub-array from the position 1 to 4 (“0010”), the difference between the zeros and ones = 3 – 1 = 2 which is the maximum that can be found.
Input
str = “00000”
Output
5
Approach used in the below program as follows
In main() function create a string str to store the binary string. Also declare an array int arr[str.length()+1];
Set all elements of arr[] = 0 by using memset(arr,0,sizeof(arr));
Loop from j = 1 till j<= str.length()
Check if(memset(arr,0,sizeof(arr)), if so then put arr[j]=max(arr[j-1]-1,-1);
Else put arr[j]=max(arr[j-1]+1,1);
Outside the loop print the maximum number by using *max_element(arr+1, arr+str.length()+1);
Example
#include<bits/stdc++.h> using namespace std; int main(){ string str = "10010110"; int arr[str.length()+1]; memset(arr,0,sizeof(arr)); for(int j=1;j<=str.length();j++){ if(str[j-1]=='1') arr[j]=max(arr[j-1]-1,-1); else arr[j]=max(arr[j-1]+1,1); } cout<<*max_element(arr+1,arr+str.length()+1); return 0; }
Output
2