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
}

浙公网安备 33010602011771号