📌  相关文章
📜  检查 0 到 N 的二进制表示是否作为给定二进制字符串中的子字符串(1)

📅  最后修改于: 2023-12-03 15:10:50.376000             🧑  作者: Mango

检查 0 到 N 的二进制表示是否作为给定二进制字符串中的子字符串

在写代码时,需要检查给定的二进制字符串中是否包含了0到N的所有二进制表示。下面是一份示例代码,用于实现这个功能。

算法
  1. 将 0 到 N 范围内的整数转化为二进制字符串。
  2. 对于每个二进制字符串,检查它是否出现在给定的二进制字符串中。
  3. 如果所有的二进制字符串都出现了,返回真,否则返回假。
代码
def is_binary_substring(binary_string, n):
    for i in range(n+1):
        binary = bin(i)[2:]
        if binary not in binary_string:
            return False
    return True
function isBinarySubstring(binaryString, n) {
    for (let i = 0; i <= n; i++) {
        const binary = i.toString(2);
        if (!binaryString.includes(binary)) {
            return false;
        }
    }
    return true;
}
运行示例
>>> binary_string = "110011000111"
>>> n = 6
>>> is_binary_substring(binary_string, n)
True
const binaryString = "110011000111";
const n = 6;
console.log(isBinarySubstring(binaryString, n)); // true
复杂度分析

上述算法的时间复杂度为 $O(n^2)$,其中 $n$ 是 $N$ 的二进制表示的位数。因为要遍历从 0 到 $N$ 的所有整数,并检查它们的二进制表示是否出现在给定的字符串中。

空间复杂度取决于存储所有二进制表示的字符串需要多少内存。在最坏情况下,当 $N$ 等于 $2^k -1$ 时,需要存储 $k$ 个二进制字符串,空间复杂度为 $O(k)$。在最好情况下,当 $N=1$ 时,只需要存储一个二进制字符串,空间复杂度为 $O(1)$。