Home > Article > Backend Development > Minimum number of non-adjacent pair flips required to remove all zeros in a binary string
In a binary string, flipping a pair of adjacent bits can easily remove a single 0 from the string. However, when we need to remove all 0's from a binary string, we may also need to flip non-adjacent bit pairs. In this article, we will discuss how to determine the minimum number of non-adjacent pair flips required to remove all 0's from a binary string.
To solve this problem, we will use a simple greedy algorithm. The idea is to always choose the pair of bits that are furthest away from each other and have at least one 0 in between. We can then flip these two bits, effectively removing a 0 from the string. We repeat this process until all 0's have been removed.
Now let us implement this algorithm in C.
#include <iostream> #include <cstring> using namespace std; int main() { string s; s="100101000"; int n = s.size(); int cnt = 0; for (int i = 0; i < n; i++) { if (s[i] == '0') { cnt++; if (i+2 < n && s[i+2] == '0') { i += 2; } else { i++; } } } cout << cnt << endl; return 0; }
3
The code above takes a binary string as input and calculates the minimum number of non-adjacent pair flips required to remove all 0's from the string. Now let's look at the code in detail.
First, we take a binary string as input and store it in the string variable "s". We also store the size of the string in an integer variable "n".
string s; cin >> s; int n = s.size();
Next, we initialize the variable "cnt" to store the number of 0's in the string. We then iterate over the string using a for loop. For each 0 encountered, we increment the count of 0s and check if the next two bits are also 0s. If so, we flip the pair of bits by increasing the index by 2. Otherwise, we flip only adjacent bit pairs by increasing the index by 1.
int cnt = 0; for (int i = 0; i < n; i++) { if (s[i] == '0') { cnt++; if (i+2 < n && s[i+2] == '0') { i += 2; } else { i++; } } }
Finally, we output the count of non-adjacent pair flips required to remove all 0's from the string.
cout << cnt << endl;
Let us consider the binary string "100101000". The minimum number of non-adjacent pair flips required to remove all 0's from this string can be calculated using the algorithm above.
First, we encounter 0 at position 2. We flip the (1,3) pair to get the string "110101000". Then we encounter the next 0 at position 5. We flip the (1,7) pair to get the string "111101000". Then we encounter the next 0 at position 8. We flip the (1,9) pair to get the string "111111000". Now all 0's have been removed from the string.
The number of non-adjacent pair flips required to remove all 0's from a string is 3. We can verify this by running the above C code on the input string "100101000".
In this article, we discussed how to determine the minimum number of non-adjacent pair flips required to remove all 0's from a binary string. We use a simple greedy algorithm to solve this problem and implement it in C code. We also provide an example test case to illustrate how the algorithm works.
The above is the detailed content of Minimum number of non-adjacent pair flips required to remove all zeros in a binary string. For more information, please follow other related articles on the PHP Chinese website!