1461. 检查一个字符串是否包含所有长度为 K 的二进制子串

Code
func hasAllCodes(s string, k int) bool {
    length := len(s)
    if length < k {
        return false
    }
 
    seen := make(map[int]struct{})
 
    num := 0
    for i := 0; i < k; i++ {
        num = num * 2 + int(s[i] - '0')       
    }
    seen[num] = struct{}{}
 
    for i := k; i < length; i++ {
        left := int(s[i - k] - '0') << (k - 1)
        num = (num - left) * 2 + int(s[i] - '0')
        seen[num] = struct{}{}
        fmt.Println(num)
    }
 
    return len(seen) == (1 << k)
}