当前位置: 首页 > article >正文

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

题解代码

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/


http://www.kler.cn/a/376785.html

相关文章:

  • 用ChatGPT提升工作效率:从理论到实际应用
  • 操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)
  • 【c++日常刷题】两个数字的交集、点击消除、最小花费爬楼梯
  • SpringKafka生产者、消费者消息拦截
  • Puppeteer点击系统:解锁百度流量点击率提升的解决案例
  • MongoDB常用操作
  • 动态SQL在梧桐数据库的使用介绍
  • MySQL锁表快速解决办法
  • ELK的ElasticStack概念
  • 11408 计网===物理层
  • 使用 Redis 作为异步队列:原理、实现及最佳实践
  • 小新学习k8s第六天之pod详解
  • Linux 常用安装软件
  • 虚幻引擎5(UE5)学习教程
  • BERT语言模型详解【Encoder-Only】
  • LeetCode HOT100系列题解之课程表(9/100)
  • MAC电脑的ifconfig输出
  • 浅谈mysql【8.0】链接字符串
  • 用于 Web 开发的 10 个必备 VS Code 扩展
  • iOS用rime且导入自制输入方案
  • linux_电脑一运行程序就死机怎么处理?
  • 锁原理和使用
  • Docker 安装HomeAssistant智能家居系统
  • uni-app实现app展示进度条在线更新以及定时更新提醒
  • 懂前端的都知道这里的门道有多深 - js 的事件循环
  • git am使用详解