1016. 子串能表示从 1 到 N 数字的二进制串

news2024/9/20 6:12:31

给定一个二进制字符串 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 <= 109
链接:https://leetcode.cn/problems/binary-string-with-substrings-representing-1-to-n

解一:暴力(bitset模板)

class Solution {
public:
    bool queryString(string s, int n) 
    {
        for(int i = 1;i <= n; i++)
        {
            auto str = bitset<32>(i).to_string();
            str = str.substr(str.find('1'));
            if(s.find(str) == s.npos)return false;
        }
        return true;
    }
};

解二:哈希表

以下代码请自行理解,可以自己写一个小的二进制串跟一遍

class Solution {
public:
    bool queryString(string s, int n)
    {
        unordered_set<int>ans;
        for(int i = 0;i < s.size(); i++)
        {
            int x = s[i] ^ 48;
            if(!x)continue;
            for(int j = i + 1;x <= n;j++)
            {//提问1:为什么是j = i + 1 ??? 
                ans.insert(x);
                x = (x << 1) | (s[j] ^ 48);//提问二:这样赋值的意义?
                if(j == s.size() )break;
            }
        }
        return ans.size() == n;
    }
};

解三:滑动窗口 + 哈希表 + 数学

分析:

1:列表

11
210
311
4100
5101
6110
7111
81000
91001
101010
111011
121100
131101
141110
151111

总结:

直接分享这位大佬的题解,讲的很详细也很全面

 

根据上列三个

class Solution {
public:
    bool help(const string& s, int bitlen, int min, int max) 
    {
        unordered_set<int> st;
        int t = 0;
        for (int r = 0; r < s.size(); ++r)
        {
            t = (t << 1) + (s[r] ^ 48);
            if (r >= bitlen)
                t -= (s[r - bitlen] ^ 48) << bitlen;
            if (r >= bitlen - 1 && t >= min && t <= max)
                st.insert(t);
        }
        return st.size() == max - min + 1;
    }

    bool queryString(string s, int n) 
    {
        if (n == 1)  return s.find('1') != s.npos;
        int bitlen = 31 - __builtin_clz(n);
        if (s.size() < (1 << (bitlen - 1)) + bitlen - 1 || s.size() < n - (1 << bitlen) + bitlen + 1) return false;
        return help(s, bitlen, 1 << (bitlen - 1), (1 << bitlen) - 1) && help(s, bitlen + 1, 1 << bitlen, n);
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/544290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】new和delete

new是个运算符 使用&#xff1a; new 类型&#xff08;初始值&#xff09;&#xff1b; malloc和new的区别&#xff1a; 1--new申请空间失败抛出异常&#xff0c;malloc返回空指针 ip(new(nothrow) Int(10))//不想它抛出异常 2--new调用构造函数 3--new可以重…

智慧闹钟

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 首先相对于传闹钟设置闹铃的方式&#xff0c;我想把这款创意闹钟设计成通过光照传感器来实现对闹钟的开启&#xff0c;更有效实现闹钟的自动化、智能化&#xff0c;不过为了防止误触带来闹钟的开启&#xff0c;需要对开启条件…

一起搭建我的世界服务器来实现公网远程联机教程「不需要公网IP」

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 转载自内…

第十七章_Redis布隆过滤器BloomFilter实战

是什么 一句话 由一个初值都为零的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素 设计思想 目的 减少内存占用 方式 不保存数据信息&#xff0c;只是在内存中做一个是否存在的标记flag 本质就是判断具体数据是否存在于一个大的集合中 备注 布…

好兄弟单身?这不得用python来帮他脱离苦海

明天什么节日 &#xff1f;明天谁过节 &#xff1f; 是你吗&#xff0c;还是你的朋友 &#xff1f;如果是你的话&#xff0c;那咱就帮帮朋友&#xff0c;到年龄的咱就直接相亲呗 赠人玫瑰 手留余香 好人做到底&#xff0c;来让朋友体验体验恋爱的感觉~ 今天就带你们来爬爬相亲…

BoostSearch搜索引擎

今天讲的项目是基于C的Boost库的站内搜索引擎。因为Boost库内没有搜索关键字功能&#xff0c;所以在这里我们来手动实现一个这样的搜索引擎。当用户在输入框输入要查询的关键字后&#xff0c;就会快速查询出相关的 boost 库中的文档&#xff0c;弥补 boost 在线文档没有搜索功能…

C++进阶——mapset的使用

C进阶——map&set的使用 关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这 些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存…

chatgpt赋能Python-python2的阶乘

Python2中的阶乘 Python是一种高级编程语言&#xff0c;它可以用来编写各种各样的程序。在Python中&#xff0c;阶乘是一个经常用到的数学概念&#xff0c;由于其强大的计算能力和易学易用的特点&#xff0c;Python成为了计算阶乘的一个很好的工具。在这篇文章中&#xff0c;我…

MySql 数据库的锁机制和原理

MySQL是一种流行的关系型数据库管理系统&#xff0c;广泛应用于各种Web应用程序和企业级应用程序中。在MySQL中&#xff0c;锁是一种用于控制并发访问的机制&#xff0c;它可以保证数据的一致性和完整性。本文将介绍MySQL的锁机制及原理&#xff0c;包括锁的类型、级别和实现原…

Idea配置moven

moven的下载与安装 https://maven.apache.org/download.cgi 解压到指定位置&#xff0c;配置环境变量 编辑系统变量Path&#xff0c;添加变量值&#xff1a;%MAVEN_HOME%\bin winr输入cmd输入 mvn -v 出现上述界面&#xff0c;则表示成功安装Maven 新建一个文件夹作为本地…

[入门必看]数据结构5.5:树与二叉树的应用

[入门必看]数据结构5.5&#xff1a;树与二叉树的应用 第五章 树与二叉树5.5 树与二叉树的应用知识总览5.5.1 哈夫曼树5.5.2_1 并查集5.5.2_2 并查集的进一步优化 5.5.1 哈夫曼树带权路径长度哈夫曼树的定义哈夫曼树的构造哈夫曼编码应用&#xff1a;英文字母频次 5.5.2_1 并查集…

MybatisPlus详解

文章目录 1.MyBatisPlus的介绍1.1 MybatisPlus的特性讲解1.2 支持的数据库1.3 MybatisPlus的日志 2.映射2.1 自动映射规则2.2 表映射2.3 字段映射2.4 字段失效2.5 视图属性 3. 条件构造器3.1 等值查询3.1.1 eq3.1.2 allEq3.1.3 ne 不等于 3.2 范围查询3.2.1 gt 大于3.2.2 ge 大…

[Nacos] Nacos Client重要Api (一)

Instance&#xff1a;实例&#xff0c;代表一个Nacos Client主机实例。ServiceInfo&#xff1a;微服务信息实例。其包含着一个Instance列表。NamingService&#xff1a; 该接口只有一个实现类&#xff0c;NacosNamingService。通过这个类的实例&#xff0c;可以完成Client与Ser…

数据结构篇六:二叉树

文章目录 前言1. 树的概念及结构1.1 树的概念1.2 树的相关概念1.3 树的结构 2. 二叉树的概念及结构2.1 二叉树的概念2.2 特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储结构 3. 二叉树的顺序结构及实现3.1 二叉树的顺序结构3.2 堆的概念及结构3.3 堆的实现3.3.1 堆的创建3.3.2 …

如何在命令提示符中备份Windows设备驱动程序

如果清理安装Windows,则需要为系统中的每个设备安装驱动程序。制造商可能不再提供其中一些设备驱动程序,或者你放错了制造商的驱动程序安装文件备份。 在进行干净安装之前备份设备驱动程序是个好主意,这样之后就可以根据需要轻松恢复这些驱动程序,我们可以按以下方法来备份…

跟着chatGPT学习:kubernetes中的Reflector、list-watcher、informer等概念

以下是我跟chatGPT学习kubernetes中Reflector、list-watcher、informer等的概念的过程 不敢保证chatGPT回答的百分之百准确。但是&#xff0c;确实帮助我了我理解&#xff01; 最终学习的是下面的图&#xff0c; 1、在kubernetes中Reflector原理&#xff1f; 在Kubernetes…

PDF工具Adobe Arcrobat Pro DC下载安装教程

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;adobe 免费获取Adobe Arcrobat Pro DC安装包 Acrobat是一款PDF&#xff08;Portable Document Format&#xff0c;便携式文档格式&#xff09;编辑软件。借助它&#xff0c;您可以以PDF格式制作和保存你的文档 &#xff0c…

Oracle数据库服务器中了locked1勒索病毒的方式与破坏用友nchome配置文件方式

随着计算机技术的不断发展&#xff0c;网络安全问题也变得日益严峻。其中&#xff0c;勒索病毒就是一种非常危险的网络威胁。它可以通过加密受害者的文件或数据库&#xff0c;使其无法正常使用&#xff0c;然后向受害者勒索赎金以解密文件。而最近收到很多企业的求助&#xff0…

什么是语音识别的语音助手?

前言 语音助手已经成为现代生活中不可或缺的一部分。人们可以通过语音助手进行各种操作&#xff0c;如查询天气、播放音乐、发送短信等。语音助手的核心技术是语音识别。本文将详细介绍语音识别的语音助手。 语音识别的基本原理 语音识别是将语音信号转换为文本的技术。语音识…

Centos7升级gcc、g++版本

Centos7默认的 gcc版本是 4.8.5 默认使用yum install gcc安装出来的gcc版本也是是4.8.5。 1.首先查看自己的 gcc 版本 gcc -v g -v如果出现&#xff1a;bash: g: 未找到命令... 则安装g&#xff1a;遇到暂停时&#xff0c;输入y继续安装 yum install gcc-c然后输入&#xf…