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

leetcode 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串-耗时96内存94

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

耗时96%,内存94%,用到了位运算的,固定长度是k,所以共有从0~2 k − 1 2^{k-1}2k12 k 2^{k}2k个数字,若以s的长度一定>large,稍稍放宽一点就是n不能小于large*2

使用滚动计算出长度为k的子串代表的十进制数字num,考虑到长度固定是k,所以需要将最高位的第k位置0然后右移一位加上s[i]-‘0’,large = (((1<<k) - 1) >> 1);

当k=3时,(1<<k)=8(1000),(1<<k) - 1)=7(111), (((1<<k) - 1) >> 1)=3(011),此时最高位第3位刚好是0其他低位都是1

此时num &= large;刚好将最高位第k位的数字置0,其他低位保持不变

num = (num << 1) + (s[i]-‘0’);就是右移一位然后加上(s[i]-‘0’)

只需要用状态数组标记,最后检查0~2 k − 1 2^{k-1}2k12 k 2^{k}2k个数的状态是否都是true也就是都出现过即可

Code

class Solution { public: bool hasAllCodes(string s, int k) { int len = pow(2, k), num = 0, n = s.size(); int large = (((1<<k) - 1) >> 1); if(n < large * 2) return false; if(k==1) { if(s.find('0')!=string::npos && s.find('1')!=string::npos) return true; else return false; } vector<bool> status(len, false); for(int i = 0; i < k; i++) { num = (num << 1) + (s[i]-'0'); } status[num] = true; for(int i = k; i < n; i++) { num &= large; num = (num << 1) + (s[i]-'0'); status[num] = true; } for(int i = 0; i < len; i++) { if(status[i]==false) return false; } return true; } };
http://www.jsqmd.com/news/518376/

相关文章:

  • 你的手机拍照能打几分?聊聊SPAQ数据集与智能手机摄影质量评测那些事儿
  • 企业级NAS如何为vSphere提供高性能共享存储?ISCSI优化配置与容量监控技巧
  • 保姆级教程:用IDM+缓存目录手动安装Arduino ESP8266开发环境(附资源包)
  • 国产化替代实战:银河麒麟V10+ARM平台如何绕过Docker 18限制跑KubeSphere 3.3
  • 2023年轻量级浏览器新选择:Cent浏览器如何以68%内存占用挑战Chrome霸主地位
  • 哈工大集合论与图论慕课答案全解析(2022最新版)——附对比选项技巧
  • VS2019下用C语言手写扫雷游戏:从代码解析到实战调试(附完整源码)
  • 深入解析Ceres优化库:Problem类与LocalParameterization实战指南
  • 编写程序让智能雨伞检测到下雨湿度时,伞柄指示灯亮起,提醒带伞出门。
  • 解决:[Errno 14] curl#6 - ‘Could not resolve host: mirrors.cloud.aliyuncs.com‘ 的全面排查与修复指南
  • 保姆级教程:用OpenVINO在Intel显卡上跑通PP-OCRv5文字识别(附环境配置避坑指南)
  • 避开这5个坑!Unity EditorGUILayout开发中的常见问题解决方案
  • 信息系统管理师第四版十大知识领域速记:用故事线3天搞定49个子过程
  • Snipe-IT与MySQL外部数据库的Docker化部署避坑指南
  • Mac用户必看:用Scrcpy有线投屏安卓手机的5个隐藏技巧(附HomeBrew一键安装)
  • 从光流校准到平稳悬停:搞定匿名飞控无人机‘跑偏’问题的实战调试记录
  • 信号与系统实战:5个拉普拉斯变换典型例题解析(附MATLAB验证代码)
  • 不止是硬解:用N5095+Ubuntu搭建Jellyfin,顺便搞定SMB共享和NTFS硬盘自动挂载
  • 信创实战:在麒麟V10上构建.NET 6与金仓数据库的完整应用栈
  • TensorFlow Benchmark 性能调优实战:从环境配置到模型压测
  • 编写程序实现智能烤箱温度实时监测,达到设定温度后,提示“可以放入食材”。
  • GME-Qwen2-VL-2B软件重构指南:识别并改善代码中的耦合过度问题
  • HFSS仿真教程:用Ansys还原AirPods蓝牙天线设计(含LDS工艺参数)
  • 避坑指南:用Python+Pylink实现嵌入式设备Flash擦写(含中文路径问题解决)
  • Halcon实战:两种灰度化方法的核心原理与工业视觉选型指南
  • 智能车竞赛实战:DRV8701全桥驱动电路设计避坑指南(附CSD87350 MOS选型)
  • YOLOv8实战:从检测框到中心坐标的精准提取与应用
  • 告别栅格地图!用VAD的矢量化思路,让你的自动驾驶模型推理快9倍
  • Python新手必看:如何快速解决‘str‘ object has no attribute ‘to‘错误(附真实案例)
  • 病理图像处理新手必看:SVS和TIFF格式转换的5个实用技巧(附代码示例)