Minimum flips required to generate continuous substrings of 0’s and 1’s
Given a binary string S of length N, the task is to find the minimum number of bit flips required to convert the given string such that it contains only continuous substrings of 0’s and 1’s such that the final string is in the form of 000..000, 111..111, 111…000 or 000…111.
Examples:
Input: S = 000100101, N = 9
Output: 2
Explanation:
000100101 -> 000000001Input: S = 01100, N = 5
Output: 1
Explanation:
01100 -> 11100
Approach:
The minimum number of flips can be calculated efficiently in two linear traversals.
In the first traversal, we will calculate what can be the minimum number of flips required in the worst case, as it can be equal to the number of total 0’s initially.
In the second traversal, at every step, the total number of flip required will be the sum of total 1’s before that point and total 0’s after that point. we will take a minimum of all values calculated at every step.
Hence, to solve the problem, follow the steps below:
- Initialize variables count0 = 0, count1 = 0 and res = 0. where, count0 strores count of 0 and count1 stores count of 1 and res stores the bit flips required.
- Traverse the input string, calculate 0’s and store it in res variable.
- Traverse the input string and subtract the count of 0 if character 0 is found and store the count of character 1 in variable count1 and updates the res as min(res, count0+count1).
Below is the implementation of the above approach.
C++
// C++ implementation of the above approach #include <bits/stdc++.h> using namespace std; int minChanges(string str, int N) { int res; int count0 = 0, count1 = 0; // Traverse input string // and store the count of 0 for ( char x : str) { count0 += (x == '0' ); } res = count0; // Traverse the input string again // to find minimum number of flips for ( char x : str) { count0 -= (x == '0' ); count1 += (x == '1' ); res = min(res, count1 + count0); } return res; } // Driver code int main() { int N = 9; string str = "000101001" ; cout << minChanges(str, N); return 0; } |
Java
// Java implementation of the above approach import java.io.*; class GFG{ static int minChanges(String str, int N) { int res; int count0 = 0 , count1 = 0 ; // Traverse input string // and store the count of 0 for ( char x : str.toCharArray()) { if (x == '0' ) count0++; } res = count0; // Traverse the input string again // to find minimum number of flips for ( char x : str.toCharArray()) { if (x == '0' ) count0--; if (x == '1' ) count1++; res = Math.min(res, count1 + count0); } return res; } // Driver code public static void main(String[] args) { int N = 9 ; String str = "000101001" ; System.out.println(minChanges(str, N)); } } // This code is contributed by offbeat |
Python3
# Python3 implementation of the above approach def minChanges( str , N): count0 = 0 count1 = 0 # Traverse input string # and store the count of 0 for x in str : count0 + = (x = = '0' ) res = count0 # Traverse the input string again # to find minimum number of flips for x in str : count0 - = (x = = '0' ) count1 + = (x = = '1' ) res = min (res, count1 + count0) return res # Driver code N = 9 str = "000101001" print (minChanges( str , N)) # This code is contributed by shubhamsingh10 |
2
Time complexity: O(k), where, k is length of binary string.
Space complexity: O(1)
Recommended Posts:
- Minimum flips required to keep all 1s together in a Binary string
- Minimum flips required in a binary string such that all K-size substring contains 1
- Minimum flips required to form given binary string where every flip changes all bits to its right as well
- Min flips of continuous characters to make all characters same in a string
- Minimum flips to make all 1s in left and 0s in right | Set 2
- Minimum bit flips such that every K consecutive bits contain at least one set bit
- Count minimum right flips to set all values in an array
- Find Bit whose minimum sequence flips makes all bits same
- Repeat substrings of the given String required number of times
- Minimum Group Flips to Make Binary Array Elements Same
- Minimum letters to be removed to make all occurrences of a given letter continuous
- Count of minimum reductions required to get the required sum K
- Generate a string whose all K-size substrings can be concatenated to form the given string
- Minimum changes to a string to make all substrings distinct
- Minimum number of substrings the given string can be splitted into that satisfy the given conditions
- Remove minimum characters from string to split it into three substrings under given constraints
- Generate array with minimum sum which can be deleted in P steps
- Minimum steps to delete a string after repeated deletion of palindrome substrings
- Minimum number of coins that can generate all the values in the given range
- Minimum rotations required to get the same string
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.