Home > Backend Development > C++ > Minimum number of non-adjacent pair flips required to remove all zeros in a binary string

Minimum number of non-adjacent pair flips required to remove all zeros in a binary string

WBOY
Release: 2023-09-04 13:09:06
forward
756 people have browsed it

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.

algorithm

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.

Example

#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;
}
Copy after login

Output

3
Copy after login

Code description

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();
Copy after login

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++;
      }
   }
}
Copy after login

Finally, we output the count of non-adjacent pair flips required to remove all 0's from the string.

cout << cnt << endl;
Copy after login

Test case example

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 conclusion

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!

Related labels:
source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template