使用 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
广告