Description
Given a binary string s and a positive integer n, return true if the binary representation of all the integers in the range [1, n] are substrings of s, or false otherwise.
A substring is a contiguous sequence of characters within a string.
Example 1:
Input: s = "0110", n = 3 Output: true
Example 2:
Input: s = "0110", n = 4 Output: false
Constraints:
1 <= s.length <= 1000s[i]is either'0'or'1'.1 <= n <= 109
Solutions
Solution 1: Brain Teaser
We observe that the length of string s does not exceed 1000, so string s can represent at most 1000 binary integers. Therefore, if n \gt 1000, then s definitely cannot represent the binary representation of all integers in the range [1,.. n].
Additionally, for an integer x, if the binary representation of x is a substring of s, then the binary representation of \lfloor x / 2 \rfloor is also a substring of s. Therefore, we only need to check whether the binary representations of integers in the range [\lfloor n / 2 \rfloor + 1,.. n] are substrings of s.
The time complexity is O(m2 × log m) and the space complexity is O(log n), where m is the length of string s and n is the positive integer given in the problem.
class Solution: def queryString(self, s: str, n: int) -> bool: if n > 1000: return False return all(bin(i)[2:] in s for i in range(n, n // 2, -1))(code-box)
