在这个问题中,我们需要从给定的二进制字符串中移除所有的零。同时,我们需要一次性移除连续的一对零,并计算移除的零对的总数。
We can solve the problem by counting the number of pairs of consecutive zeros in the given string. In this tutorial, we will learn two different solutions to solve the problem.
问题陈述 − 我们给出了一个长度为N的循环二进制字符串str。我们需要找到从字符串中移除所有零所需的最小连续零的数量。
示例示例
Input – str = "0011001"
登录后复制
Output – 2
登录后复制登录后复制
Explanation
我们可以一起删除str[0]和str[1]。之后,我们可以删除str[4]和str[5]。所以,我们需要删除2对连续的零。
Input – str = ‘0000000’
登录后复制
Output – 1
登录后复制
Explanation
我们可以一次性删除所有的零。
Input – str = ‘00110010’
登录后复制
Output – 2
登录后复制登录后复制
Explanation
We can remove str[0], str[1], and str[7] together as the binary string is circular. Next, we can remove str[5] and str[6] together.
Approach 1
在这种方法中,我们将找到给定字符串中连续零对的总数,这将回答给定的问题。
Algorithm
-
步骤 1 - 将'cnt'变量初始化为零。
-
第二步 - 将'isOne'变量初始化为false值,以跟踪给定字符串中的数字1。
-
步骤 3 - 使用循环迭代字符串。在循环中,如果当前字符是 '0',则将 'cnt' 的值增加 1。
-
步骤 4 − 使用 while 循环进行迭代,直到我们继续找到下一个字符为 '0',并将 'I' 的值增加 1。
-
第五步 - 如果当前字符是'1',将'isOne'变量的值更改为true,表示字符串中至少包含一个'1'。
-
Step 6 − Once the iteration of the loop completes, If the value of ‘isOne’ is false, it means the string contains only zeros. Return 1 in such cases.
-
Step 7 − If the first and last characters are ‘0’, decrease the value of the ‘cnt’ by 1 as the string is circular.
-
Step 8 − Return the value of ‘cnt’.
Example
的中文翻译为:
示例
#include
using namespace std;
int countRemovels(string str, int N){
// to store the count of 0s
int cnt = 0;
bool isOne = false;
// Iterate over the string
for (int i = 0; i < N; i++){
// If the current character is 0, increment the count of 0s
if (str[i] == '0'){
cnt++;
// traverse the string until a 1 is found
while (str[i] == '0'){
i++;
}
}
else{
// If the current character is 1, then set isOne as true
isOne = true;
}
}
// If string contains only 0s, then return 1.
if (!isOne)
return 1;
// If the first and last character is 0, then decrement the count, as the string is circular.
if (str[0] == '0' && str[N - 1] == '0'){
cnt--;
}
// return cnt
return cnt;
}
int main(){
string str = "0011001";
int N = str.size();
cout