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

LeetCode——子串能表示从 1 到 N 数字的二进制串

1016. 子串能表示从 1 到 N 数字的二进制串 - 力扣(Leetcode)

目录

一、题目

二、题目解读

 三、代码


一、题目

给定一个二进制字符串 s 和一个正整数 n,如果对于 [1, n] 范围内的每个整数,其二进制表示都是 s 的 子字符串 ,就返回 true,否则返回 false 

子字符串 是字符串中连续的字符序列。

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length <= 1000
  • s[i] 不是 '0' 就是 '1'
  • 1 <= n <= 10

二、题目解读

1、暴力Ⅰ

我们可以遍历1到n看是否其二级制是s的子字符串。在这个过程我们可以进行倒序进行判断,先判断较大的数。

可能有人会说这样不会超时吗?

        

        举例说明。如果 n=7,单看闭区间 [4,7],有 4 个互不相同的整数,它们的二进制长度均为 3。如果要让字符串 s 包含这 4 个数,s 中至少要有 4 个长为 3 的互不相同的子串。考虑到这些子串可以有重叠部分,设 s 的长度为 m,则应满足 m≥3+(4−1)=6,否则直接返回false。(想象一个长为 3 的滑动窗口在 s 中滑动,至少要得到 4 个子串。)随着 n 的变大,m 的长度也应当随之变大。本题 m 至多为 1000,而 n 却高达 10⁹ 。

        所有如果 n≥2014n,可以直接返回 false

Ⅱ、

        反过来想,把 s 的子串都转成二进制数,如果数字在 [1,n] 内,就保存到一个哈希表中。如果哈希表的大小最终为 n,就说明 [1,n] 的二进制都在 s 里面。

2、滑动窗口

        1、根据 n 和 m(字符串长度) 的值来提前判断是否要返回 false。
        2、只需要考虑长为 k 和 k+1 的这两组二进制数 s 是否都有,因此可以用长为 k 和 k+1 的滑动窗口实现,从而做到线性时间复杂度。
        3、进一步地,由于区间 [2ᴷ,n] 内的所有数右移一位可以得到区间 [2ᴷ⁻¹,n/2 ],所以对于 [2ᴷ⁻¹,2ᴷ−1],只需从  n/2+1  开始考虑。

 三、代码

 代码Ⅰ

class Solution {public boolean queryString(String s, int n) {for (int i = n; i >= 1; i--) {if (!s.contains(Integer.toBinaryString(i))) {return false;}}return true;}
}

 代码Ⅱ

class Solution {public boolean queryString(String S, int n) {HashSet<Integer> set = new HashSet<>();char[] s = S.toCharArray();for (int i = 0, m = s.length; i < m; ++i) {int x = s[i] - '0';if (x == 0) continue; // 二进制数从 1 开始for (int j = i + 1; x <= n; j++) {set.add(x);if (j == m) break;x = (x << 1) | (s[j] - '0'); // 子串 [i,j] 的二进制数}}return set.size() == n;}
}

滑动窗口

class Solution {public boolean queryString(String s, int n) {if (n == 1)return s.contains("1");int k = 31 - Integer.numberOfLeadingZeros(n); // n 的二进制长度减一if (s.length() < Math.max(n - (1 << k) + k + 1, (1 << (k - 1)) + k - 1))return false;return check(s, k, n / 2 + 1, (1 << k) - 1) && check(s, k + 1, 1 << k, n);}// 对于长为 k 的在 [lower, upper] 内的二进制数,判断这些数 s 是否都有private boolean check(String s, int k, int lower, int upper) {if (lower > upper) return true;var seen = new HashSet<Integer>();int mask = (1 << (k - 1)) - 1;int x = Integer.parseInt(s.substring(0, k - 1), 2);for (int i = k - 1, m = s.length(); i < m; i++) {// & mask 可以去掉最高比特位,从而实现滑窗的「出」// << 1 | (s.charAt(i) - '0') 即为滑窗的「入」x = ((x & mask) << 1) | (s.charAt(i) - '0');if (lower <= x && x <= upper)seen.add(x);}return seen.size() == upper - lower + 1;}
}

 超详细题解可看

1016. 子串能表示从 1 到 N 数字的二进制串 - 力扣(Leetcode)

 

相关文章:

LeetCode——子串能表示从 1 到 N 数字的二进制串

1016. 子串能表示从 1 到 N 数字的二进制串 - 力扣&#xff08;Leetcode&#xff09; 目录 一、题目 二、题目解读 三、代码 一、题目 给定一个二进制字符串 s 和一个正整数 n&#xff0c;如果对于 [1, n] 范围内的每个整数&#xff0c;其二进制表示都是 s 的 子字符串 &…...

看火山引擎DataLeap如何做好电商治理(二):案例分析与解决方案

接上篇&#xff0c;以短视频优质项目为例&#xff0c;火山引擎DataLeap平台治理团队会去对每天发布的这种挂购物车车短视频打上标签&#xff0c;识别这些短视频它是优质的还是低质的&#xff0c;以及具体原因。一个视频经过这个模型识别之后&#xff0c;会给到奖惩中心去做相应…...

MySQL笔记-多表查询

本文标签 : 多表查询 事务四大特性 并发事务问题 事务隔离级别 文章目录 目录 文章目录 一、多表查询 1.多表关系 2.多表查询概念 3.多表查询的分类 4.内连接 5.外连接 6.自连接 7.联合查询 8.子查询 1.标量子查询 2.列子查询 3.行子查询 4.表子查询 9.多表查询案例练习 二…...

如何用100天时间,让CSDN的粉丝数从0狂飙到10000

2022年10月7日&#xff0c;正式开通了CSDN账号。但因为工作忙的原因&#xff0c;一直没有时间写博客文章&#xff0c;也没有投入精力在CSDN上。理所当然的&#xff0c;我的粉丝数量很稳定&#xff0c;一直保持着0的记录。 2023年春节假期过后&#xff0c;有点空闲时间了&#x…...

各种同质图神经网络模型的理论和节点表征学习任务的集合包rgb_experiment

诸神缄默不语-个人CSDN博文目录 最近更新时间&#xff1a;2023.5.10 最早更新时间&#xff1a;2023.5.10 本文仅考虑同质图setting下的模型。 对于异质图场景&#xff0c;可以参考我写的另一篇博文&#xff1a;异质图神经网络&#xff08;持续更新ing…&#xff09; node2ve…...

【C++进阶之路】类和对象(中)

文章目录 前言六大默认成员函数 一.构造函数性质默认构造函数构造函数(需要传参) 二.析构函数性质默认析构函数练习 三.拷贝构造函数基本性质&#xff1a;形参必须是引用默认拷贝构造浅拷贝深拷贝自定义类型 四.赋值运算符重载函数基本特征全局的运算符重载函数局部的运算符重载…...

AIMD 为什么收敛(tcp reno/cubic 为什么好)

TCP 拥塞控制目标是缓解并解除网络拥塞&#xff0c;让所有流量公平共享带宽&#xff0c;合在一起就是公平收敛。 AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子&#xff0c;包括 RoCE&#xff0c;BBRv2) 为什么收敛&#xff1f;我一般会给出下面的老图&#xff1a;…...

医院智能导诊系统,医院导航解决方案

随着现代医院规模不断扩大&#xff0c;功能区域越来越细化&#xff0c;面对复杂的楼宇结构&#xff0c;集中的就诊人流&#xff0c;患者在就诊中经常会面临找不到目的地的困境&#xff0c;就诊体验变差。针对这个问题&#xff0c;一些面积和规模都比较大的医院&#xff0c;已经…...

【论文复现】基于区块链的分布式光伏就地消纳交易模式研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

在滴滴和字节跳动划水4年,过于真实了...

先简单交代一下吧&#xff0c;沅哥是某不知名211的本硕&#xff0c;18年毕业加入滴滴&#xff0c;之后跳槽到了头条&#xff0c;一直从事测试开发相关的工作。之前没有实习经历&#xff0c;算是四年半的工作经验吧。 这四年半之间他完成了一次晋升&#xff0c;换了一家公司&am…...

tensorflow GPU训练环境布置

tensorflow GPU训练环境布置 一、显卡驱动安装1.1 如何处理**Failed to initialize NVML: Driver/library version mismatch的问题**1.2 卸载旧的版本1.3 驱动安装 1.3.1 利用apt 安装1.3.2 手动安装 二、安装CUDA2.1 确定CUDA版本2.2 下载文件1. 找匹配版本2. 选合适的平台 2…...

理解和使用Java中的枚举

枚举是一种特殊的数据类型&#xff0c;用于定义一组具名的常量。Java中的枚举类型可以包含多个枚举常量&#xff0c;每个常量都具有唯一的名称和值。本文将详细介绍Java中的枚举&#xff0c;包括为什么要使用枚举、枚举的好处、如何定义和使用枚举等。 为什么要使用枚举&#…...

C++和Java:哪种语言更适合你

C和Java&#xff1a;哪种语言更适合你 一、引言1 背景介绍2 问题阐述3 目的和意义 二、C与Java的介绍1 C的特点和优缺点2 Java的特点和优缺点3 两种语言的比较4 选择C的理由4.1 适合底层开发的特点4.2高效的编译器和运行速度4.3 自由且灵活的语言风格4.4 良好的内存管理能力 5 …...

FE_Vue学习笔记 框架的执行流程详解

1 分析脚手架结构 &#xff08;1&#xff09;CLI就是 command line interface 的缩写。Vue CLI官网&#xff1a;Vue CLI &#xff08;2&#xff09;安装过程&#xff1a; &#xff08;PS&#xff1a; 提前安装过node.js了&#xff0c;没有安装的可以打开这个&#xff1a;Downl…...

KingbaseES V8R6 等待事件之LWLock Buffer_IO

等待事件含义 当进程同时尝试访问相同页面时&#xff0c;等待其他进程完成其输入/输出(I/O)操作时&#xff0c;会发生LWLock:BufferIO等待事件。其目的是将同一页读取到共享缓冲区中。 每个共享缓冲区都有一个与LWLock:BufferIO等待事件相关联的I/O锁&#xff0c;每次都必须在共…...

桂院导航小程序 静态项目 二次开发教程

Gitee代码仓库&#xff1a;桂院导航小程序 先 假装 大伙都成功安装了静态项目&#xff0c;并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了&#xff0c;有提到 我的学校 的文字都改成你自己的就行 1. 全局 app.json…...

即时通讯APP开发费用成本多少?

移动互联网的发展&#xff0c;为人们的通讯交流提供了非常多的便利&#xff0c;一些即时通讯APP的出现&#xff0c;将人与人的距离再一次缩短。通过即时通讯APP软件&#xff0c;人们可以随时随地了解身边发生的新鲜事物&#xff0c;以及和朋友探讨各类趣事&#xff0c;甚至可以…...

女生学大数据好找工作么

好不好找工作和性别无关&#xff0c;无论你是男生还是女生&#xff0c;找工作的时候首先要看的都是学历&#xff0c;然后是个人能力&#xff0c;其中还有一定的面试经验和简历加分项~ 不要自己先把这个性别限定死&#xff0c;你有能力都能找到工作&#xff0c;不满足企业要求都…...

02-mysql升级篇(rpm方式+压缩包升级)

文章目录 升级方式一、二进制方式安装1、下载mysql-5.7.42安装包&#xff08;mysql-5.7.37升级mysql-5.7.42&#xff09;2、备份数据库、my.cnf文件&#xff0c;停止mysql服务&#xff08;重要&#xff09;3、查看当前数据库版本3、上传 mysql-5.7.42-1.el7.x86_64.rpm-bundle.…...

【Java零基础入门篇】第 ④ 期 - 继承(三)

【Java零基础入门篇】第 ④ 期 - 继承&#xff08;三&#xff09; 博主&#xff1a;命运之光专栏&#xff1a;Java零基础入门 学习目标 1.掌握继承性的主要作用、实现、使用限制&#xff1b; 2.掌握this和super的含义及其用法&#xff1b; 3.掌握方法覆写的操作&#xff1b; 4.…...

Python Selenium搭建UI自动化测试框架

自动化测试是软件测试中非常重要的一部分&#xff0c;可以提高测试效率和测试覆盖率。在UI自动化测试中&#xff0c;Selenium是非常流行的工具。本文将介绍如何使用Python和Selenium搭建UI自动化测试框架。 一、环境准备 在开始搭建UI自动化测试框架之前&#xff0c;需要先安装…...

开发大语言模型需要数据?算法?算力?

开发大语言模型的关键是什么。最近看到不少文章为了流量,甚至连 5G 通讯都说成了是开发大语言模型的关键 其实从前面的原理介绍,不难看出,大语言模型的其中一个关键点是数据。 关键一:数据​ 训练数据主要是所谓的语料库。今天的很多语言模型的语料库主要有以下几种: …...

CSS选择器的常见用法

目录 1、CSS编写方式 2.CSS选择器 1.标签选择器 2.类选择器 3.id选择器 4.后代选择器 3.CSS属性 CSS叫做"层叠样式表",作用就是装饰网页.类似于我们平时所说的化妆。 字体、大小、间距、颜色、位置、边框、背景等等统称为样式&#xff0c;用来描述一个网页。 …...

Oracle EBS修改密码

FNDCPASS修改密码 用户名必须出现在FND_USER或FND_ORACLE_USERID表中。FNDCPASS实用程序和ALLRACLE功能是为应用程序用户/模式设计的。 对于FND_USER或FND_ORACLE_USERID中不存在的用户&#xff0c;可以使用alter命令更改密码。 查询用户是否存在FND_USER或FND_ORACLE_USERI…...

《花雕学AI》33:如何用XMind制作AI思维导图、鱼骨图和组织结构图

思维导图是一种有效的思维工具&#xff0c;它可以帮助我们整理信息&#xff0c;激发创意&#xff0c;提高效率。思维导图是一种以中心主题为核心&#xff0c;以分支结构为形式&#xff0c;以关键词和图像为内容的图形表示法。它可以让我们一目了然地看到知识的层次和逻辑&#…...

【rust】| 06——语言特性 | 所有权

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础 | 变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 【rust】| 06——语言特…...

AUTOSAR入门

简介 AUTOSAR&#xff08;AUTomotive Open System ARchitecture&#xff09;是一种汽车软件架构标准&#xff0c;由德国大陆、博世、宝马等汽车及零部件制造商共同发起&#xff0c;拥有广泛的行业参与。其目标是为了解决汽车电子和软件系统日益复杂的问题&#xff0c;提高可重…...

运维高可用架构的 6 大常规方案

在介绍高可用架构的方案之前&#xff0c;先说一下什么是高可用架构&#xff0c;高可用架构应具备但不限于以下特征&#xff1a; 主从切换 很好理解&#xff0c;当其中一台机器的服务宕机后&#xff0c;对于服务调用者来说&#xff0c;能够迅速的切换到其他可用服务&#xff0c;…...

Java设计模式-桥接模式

简介 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构性设计模式&#xff0c;它的主要作用是将抽象部分和实现部分解耦&#xff0c;使它们可以独立变化而不会互相影响。桥接模式最早由GoF&#xff08;Gang of Four&#xff09;提出&#xff0c;在《设计模式》一书中…...

计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...