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

文章目录

题目描述

题解思路

长度为k的二进制子串所有取值的集合为[0, sum(k)],其中sum(k)为1 + 2 + 4 + ... + 1 << (k - 1)

我们只需要创建一个长度为sum(k) + 1的数组 f ,其中下标为 i 的元素用来标记字符串中子串取值为 i 是否不存在

我们只需要遍历字符串中所有长度为 k 的子串,然后将其数组 f 中二进制值标记为存在

最后

  • 如果数组 f 中存在子串中不存在的二进制值,则结果为false
  • 如果数组 f 中子串二进制值都存在,则结果为true

题解代码

rust 复制代码
impl Solution {
    pub fn has_all_codes(s: String, k: i32) -> bool {
        if k as usize >= s.len() {
            return false;
        }

        let s = s.as_bytes();

        let mut max_val = 0;
        
        let mut sum = 0;

        for i in 0..k as usize {
            max_val += 1 << i;
            if s[i] == b'1' {
                sum += 1 << i;
            }
        }

        let mut f = vec![true; max_val + 1];

        f[sum] = false;

        for i in k as usize..s.len() {
            if s[i - k as usize] == b'1' {
                sum -= 1;
            }

            sum >>= 1;

            if s[i] == b'1' {
                sum += 1 << (k - 1);
            }

            f[sum] = false;
        }

        for ok in f {
            if ok {
                return false;
            }
        }

        true
    }
}

题目链接

https://leetcode.cn/problems/check-if-a-string-contains-all-binary-codes-of-size-k/description/

相关推荐
CoovallyAIHub几秒前
如何让SAM3在医学图像上比专用模型还强?一个轻量Adapter如何让它“秒变”专家?
深度学习·算法·计算机视觉
suoge2236 分钟前
热传导控制方程有限元弱形式推导-有限元编程入门
算法
希望有朝一日能如愿以偿6 分钟前
力扣每日一题:统计梯形的数目
算法·leetcode·职场和发展
桃花键仙7 分钟前
vLLM-ascend快速上手:从零到一部署Llama2推理服务
后端
桃花键仙8 分钟前
PyTorch模型迁移昇腾平台全流程:ResNet50实战指南
后端
1024肥宅9 分钟前
告别异地登录告警!用 GitHub Self-Hosted Runner 打造“零打扰”全栈自动化部署
前端·后端·github
姓刘的哦12 分钟前
RK3568开发板运行Qt
开发语言·qt
猪猪拆迁队15 分钟前
高性能 Package构建系统设计与实现
前端·后端·node.js
刘晓倩17 分钟前
Python3的Sequence
开发语言·python
_院长大人_18 分钟前
Spring Boot 客户端设计示例:自动刷新 Token 并重试接口调用(Springboot Starter 封装)
java·spring boot·后端