Binary String With Substrings Representing 1 To N

medium string substring binary

Problem

Given a binary string s and a positive integer n, return true if the binary representation of every integer in the range [1, n] is a substring of s, and false otherwise.

Inputs = "0110", n = 3
Outputtrue
1 is "1", 2 is "10", and 3 is "11" — all appear inside "0110".

def query_string(s, n):
    for k in range(n, n // 2, -1):
        if bin(k)[2:] not in s:
            return False
    return True
function queryString(s, n) {
  for (let k = n; k > Math.floor(n / 2); k--) {
    if (!s.includes(k.toString(2))) return false;
  }
  return true;
}
class Solution {
    public boolean queryString(String s, int n) {
        for (int k = n; k > n / 2; k--) {
            if (!s.contains(Integer.toBinaryString(k))) return false;
        }
        return true;
    }
}
bool queryString(string s, int n) {
    auto toBin = [](int k) {
        string b;
        while (k) { b += char('0' + (k & 1)); k >>= 1; }
        reverse(b.begin(), b.end());
        return b;
    };
    for (int k = n; k > n / 2; k--) {
        if (s.find(toBin(k)) == string::npos) return false;
    }
    return true;
}
Time: O(n · |s|) Space: O(log n)