C++ 检查一个二进制字符串是否包含A对00和B个独立的0

C++ 检查一个二进制字符串是否包含A对00和B个独立的0

在计算机科学中,特别是在算法和数据结构领域中,检查一个二进制字符串是否包含A对00和B个独立的0是一个常见的问题。问题陈述非常简单,在密码学、网络安全和机器学习等各个领域都扮演着重要角色。

在本教程中,我们将讨论使用C++解决这个问题的方法。我们首先会提供一个概述,从问题陈述和一些示例开始,然后我们将深入讨论实现细节。所以让我们开始吧!

问题陈述

给定一个由0和1组成的长度为n的二进制字符串,我们需要确定它是否包含A对相邻的0(00)和B个独立的0(不与另一个0相邻)。

示例示例

示例1

Input:
s = "100101000"
A = 2
B = 1
Output:
Yes

解释: 在输入字符串中,有两对相邻的0: “10 | 010 | 1000″。此外,还有一个独立的0: “100 | 1 | 01000″。因此,输出为”Yes”,因为输入字符串包含两对相邻的0和一个独立的0。

示例2:

Input:
s = "110010010"
A = 3
B = 2
Output:
No

说明: 在输入字符串中,存在三对相邻的0:”1|100|100|10″。然而,只有两个独立的0:”1100|1|0010″。因此,输出为”No”,因为输入字符串不包含两个独立的0。

算法

  • 将pairs和singles计数器初始化为零。

  • 使用循环遍历输入字符串s,索引i从0到n-2。

  • 检查当前字符和下一个字符是否都为’0’。

    • 如果是,则将pairs增加1,通过将i增加1跳过下一个字符。
  • 否则,检查当前字符是否为’0’且下一个字符为’1’。
    • 如果是,则将singles增加1。
  • 检查s的最后一个字符是否为’0’。
    • 如果是,则将singles增加1。
  • 如果pairs数量大于等于A且singles数量大于等于B,则返回true,否则返回false。

示例

使用C++实现上述算法:

在这个实现中,我们定义一个名为’contains_zeros’的函数,它接受一个二进制字符串’s’和两个整数’A’和’B’。如果字符串包含至少’A’对相邻的零和’B’个独立的零,则函数返回’true’;否则返回’false’。

为了确定字符串中的对和独立零的数量,我们遍历字符串并记录我们遇到的对和独立零的数量。如果我们找到一对相邻的零,我们跳过下一个字符。在循环结束时,我们检查最后一个字符是否为零,相应地增加独立零的计数。

最后,在’main’函数中,我们使用输入字符串’s’和’A’和’B’的值调用’contains_zeros’。如果函数返回’true’,我们打印”Yes”;否则打印”No”。

#include <iostream>
#include <string>
using namespace std;
bool contains_zeros(string s, int A, int B) {
    int n = s.size();
    int pairs = 0;
    int singles = 0;
    for (int i = 0; i < n - 1; i++) {
        if (s[i] == '0' && s[i+1] == '0') {
            pairs++;
            i++; // Skip the next character
        } else if (s[i] == '0' && s[i+1] == '1') {
            singles++;
        }
    }
    if (s[n-1] == '0') {
        singles++;
    }
    return pairs >= A && singles >= B;
}
int main() {
    string s = "100101000";
    int A = 2;
    int B = 1;
    bool result = contains_zeros(s, A, B);
    cout << "Input:" << endl;
    cout << "s = \"" << s << "\"" << endl;
    cout << "A = " << A << endl;
    cout << "B = " << B << endl;
    cout << endl;
    cout << "Output:" << endl;
    if (result) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}

输出

在执行上述的C++程序后,将产生以下输出结果:

Input:
s = "100101000"
A = 2
B = 1

Output:
Yes

结论

总之,我们讨论了如何使用C++程序检查一个二进制字符串是否包含一定数量的0对和独立的0。我们提供了一个算法,并实现了一个函数,该函数接受一个字符串’s’和两个整数’A’和’B’作为输入,并返回一个布尔值,指示’s’是否至少包含’A’对0和’B’个独立的0。

该算法的时间复杂度为O(n),其中n是输入字符串’s’的长度,因为我们需要对’s’进行一次迭代来计算出0对和独立0的数量。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程