检查给定数字的二进制表示形式是否仅包含"01"和"10"作为子字符串

data structurec++server side programmingprogramming

在本文中,我们深入研究二进制字符串操作领域中的一个有趣问题:"检查给定数字的二进制表示形式是否仅包含'01'和'10'作为子字符串"。这个问题要求我们验证数字的二进制表示形式是否仅包含子字符串'01'和'10'。我们将详细讨论这个问题,提供 C++ 代码实现,并通过示例说明这个概念。

理解问题陈述

给定一个数字,任务是检查其二进制表示形式是否仅包含'01'和'10'作为子字符串。换句话说,我们需要验证给定数字的二进制表示是否由交替的 0 和 1 组成。

方法

解决这个问题的一个简单方法是将数字转换为二进制表示,然后检查二进制字符串是否包含任何"00"或"11"子字符串。如果包含,则二进制表示不只包含"01"和"10"子字符串。如果不是,则包含。

示例

让我们在 C++ 中实现这种方法 −

#include<bits/stdc++.h>
using namespace std;

bool checkBinary(int n) {
    string binary = bitset<32>(n).to_string();
    return binary.find("00") == string::npos && binary.find("11") == string::npos;
}

int main() {
    int n = 5;
    if (checkBinary(n)) {
        cout << "" << n << "的二进制表示仅包含 '01' 和 '10' 个子字符串。";
    } else {
        cout << "" << n << "的二进制表示不只包含 '01' 和 '10' 个子字符串。";
    }
    return 0;
}

输出

5 的二进制表示不只包含 '01' 和 '10' 个子字符串。

此代码首先使用 bitset 函数将数字转换为其二进制表示。然后,它使用 find 函数检查此二进制字符串是否包含任何"00"或"11"子字符串。

测试用例

让我们考虑数字 5。它的二进制表示形式是"101"。如您所见,它仅包含"01"和"10"作为子字符串。因此,代码的输出将是:"5 的二进制表示形式仅包含"01"和"10"子字符串。"

结论

本文深入介绍了检查给定数字的二进制表示形式是否仅包含"01"和"10"子字符串的问题。这个问题虽然看似复杂,但如果有条不紊地处理就会变得简单。我们讨论了解决问题的策略,用 C++ 实现了该方法,并用一个实际的例子解释了这个概念。


相关文章