lc1016-子串能表示从1到N数字的二进制串

题目描述

  • 给定一个二进制字符串 s 和一个正整数 n
  • 判断 [1, n] 的二进制字符串是否均出现在 s 中

示例

输入:s = "0110", n = 3
输出:true
输入:s = "0110", n = 4
输出:false

题解

  • 思路
    • 其实就是暴力
    • 因为 n <= 10^9,所以二进制字串不会超过 30 位
    • 每次固定起点,最多把 30 位二进制都记录到哈希表中,最后判断一下 [1, n] 是否都在
    • O(n), 1000 x 30 = 3w
func queryString(s string, n int) bool {
    set := map[int]bool{}
    for i := 0; i < len(s); i ++ {
        x := 0
        for j := i; j < len(s); j ++ {
            x = x * 2 + int(s[j] - '0')
            if x > n { break }
            set[x] = true
        }
    }

    delete(set, 0)
    return len(set) == n
}
posted @ 2025-09-03 21:46  余越  阅读(6)  评论(0)    收藏  举报