使二进制字符串交替的翻转次数 - C++ 集 1


假设你有一个二进制字符串 "10011"。为了使其成为交替的二进制字符串,我们需要至少翻转 2 个字符,例如 "10101"。

交替字符串有两种可能性。它将以 0 或 1 开头。我们将检查这两个交替字符串并计算两者所需的翻转次数。

然后返回两者中的最小值。让我们看一个例子。

输入

binary = "10011"

输出

2

如果我们以 0 开头,则需要翻转 3 次。如果我们以 1 开头,则需要翻转 2 次。最小值是 2。

算法

  • 初始化二进制字符串。
  • 计算使字符串交替(以 1 开头)所需的翻转次数。
  • 类似地,计算使字符串交替(以 0 开头)所需的翻转次数。
  • 找到上述两个数中的最小值。
  • 打印最小值。

实现

以下是上述算法在 C++ 中的实现

#include <bits/stdc++.h>
using namespace std;
char flip(char binaryDigit) {
   return binaryDigit == '0' ? '1' : '0';
}
int getFlipCountToAlternateString(string binary, char expected) {
   int flipCount = 0;
   for (int i = 0; i < binary.length(); i++) {
      if (binary[i] != expected) {
         flipCount++;
      }
      expected = flip(expected);
   }
   return flipCount;
}
int main() {
   string binary = "10011";
   cout << min(getFlipCountToAlternateString(binary, '0'), getFlipCountToAlternateString(binary,       '1')) << endl;
   return 0;
}

输出

如果你运行上面的代码,你将得到以下结果。

2

更新于:2021年10月26日

浏览量 578 次

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.