使用 C++ 統計使二進位制字串“ab”無出現所需的運算次數


給定一個可能包含“ab”的字串,任務是計算刪除字串中“ab”所需的運算次數。因此,我們的任務首先是檢查字串是否包含“ab”,如果包含,則必須使字串不包含“ab”。

輸入 − 字串 str = "ababaa"

輸出 − 使二進位制字串“ab”無出現所需的運算次數為 − 4

解釋 − 正如我們在字串中看到的,“ab”模式出現了兩次,因此我們將“ab”替換為“bba”,因此運算次數為 1,現在字串為 bbaabaa。再次,我們將“ab”替換為“bba”,因此運算次數為 2,現在字串為 bbabbaaa。我們還有一個“ab”,因此運算次數為 3,現在字串為 bbabbaaa。當我們繼續用“bba”替換檢查到的“ab”時,字串將變為不包含“ab”。

輸入 − str = "abaa"

輸出 − 使二進位制字串“ab”無出現所需的運算次數為 − 1

解釋 − 正如我們在字串中看到的,“ab”模式出現一次,因此我們將“ab”替換為“bba”,因此運算次數為 1,現在字串為 bbaaa。現在,字串不包含“ab”,計數為 1。

下面程式中使用的方法如下

  • 輸入一個字串,計算字串的長度,並將資料傳遞給函式以進行進一步處理。

  • 宣告一個臨時變數 count 來儲存使字串“ab”無出現所需的運算次數。

  • 建立一個大小為字串長度 + 1 的字元陣列

  • 使用 strcpy() 方法將字串的字元儲存到陣列中。

  • 從 0 開始迴圈到字串長度

  • 在迴圈內,檢查 IF arr[length - i - 1] = ‘a’,則將 count 設定為 count + 0 並將 total 變數設定為 total * 2

  • 否則,將 total 的計數加 1。

  • 返回計數

  • 列印結果。

示例

#include<bits/stdc++.h>
using namespace std;
int operations_ab_free(string str, int len){
   int count = 0;
   char arr[length + 1];
   strcpy(arr, str.c_str());
   int total = 0;
   for (int i = 0; i < len; i++){
      if (arr[len - i - 1] == 'a'){
         count = (count + total);
         total = (total * 2);
      }
      else{
         total++;
      }
   }
   return count;
}
int main(){
   string str = "ababaa";
   int length = str.length();
   cout<<"Count of operations to make a binary string “ab” free are: "<<operations_ab_free(str,
length)<<endl;
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Count of operations to make a binary string “ab” free are: 4

更新於:2020年12月2日

194 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.