使用 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 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告