Minimum flips required to form given binary string where every flip changes all bits to its right as well
Last Updated :
13 Feb, 2022
Given a string S, the task is to find minimum flips required to convert an initial binary string consisting of only zeroes to S where every flip of a character flips all succeeding characters as well.
Examples:
Input: S = “01011”
Output: 3
Explanation:
Initial String – “00000”
Flip the 2nd bit – “01111”
Flip the 3rd bit – “01000”
Flip the 4th bit – “01011”
Total Flips = 3
Input: S = “01001”
Output: 3
Explanation:
Initial String – “00000”
Flip the 2nd bit – “01111”
Flip the 3rd bit – “01000”
Flip the 5th bit – “01001”
Total Flips = 3
Approach:
In order to solve the problem, follow the steps below:
- Store ‘1’ in curr initially.
- Traverse S and find the first occurrence of curr. Increase count when curr is encountered. Store ‘0’ if curr is ‘1’ or vice versa.
- Repeat the above step for entire traversal of S.
- Final value of count gives the required answer.
Below is the implementation of the above approach.
C++
#include<bits/stdc++.h>
using namespace std;
int minFlips(string target)
{
char curr = '1' ;
int count = 0;
for ( int i = 0; i < target.length(); i++)
{
if (target[i] == curr)
{
count++;
curr = ( char )(48 + (curr + 1) % 2);
}
}
return count;
}
int main()
{
string S = "011000" ;
cout << (minFlips(S));
}
|
Java
import java.util.Arrays;
public class GFG {
public static int minFlips(String target)
{
char curr = '1' ;
int count = 0 ;
for ( int i = 0 ; i < target.length(); i++) {
if (target.charAt(i) == curr) {
count++;
curr = ( char )( 48 + (curr + 1 ) % 2 );
}
}
return count;
}
public static void main(String args[])
{
String S = "011000" ;
System.out.println(minFlips(S));
}
}
|
Python3
def minFlips(target):
curr = '1'
count = 0
for i in range ( len (target)):
if (target[i] = = curr):
count + = 1
curr = chr ( 48 + ( ord (curr) + 1 ) % 2 )
return count
if __name__ = = "__main__" :
S = "011000"
print (minFlips(S))
|
C#
using System;
class GFG{
public static int minFlips(String target)
{
char curr = '1' ;
int count = 0;
for ( int i = 0; i < target.Length; i++)
{
if (target[i] == curr)
{
count++;
curr = ( char )(48 + (curr + 1) % 2);
}
}
return count;
}
public static void Main(String []args)
{
String S = "011000" ;
Console.WriteLine(minFlips(S));
}
}
|
Javascript
<script>
function minFlips(target)
{
let curr = '1' ;
let count = 0;
for (let i = 0; i < target.length; i++)
{
if (target[i] == curr)
{
count++;
curr = String.fromCharCode(48 + (curr.charCodeAt() + 1) % 2);
}
}
return count;
}
let S = "011000" ;
document.write(minFlips(S));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...