使二進位制字串交替的翻轉次數 - 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.