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

[优选算法专题二滑动窗口——串联所有单词的子串]

题目描述

题目解析

问题定义

在字符串 s 中寻找所有满足以下条件的子串起始索引:

  • 子串由 words 数组中所有单词无重复、无遗漏地串联而成
  • 子串中单词顺序可任意排列
核心解题策略:滑动窗口 + 哈希表

通过滑动窗口控制子串范围,用哈希表统计单词频次,实现高效匹配。

关键步骤解析
  1. 预处理阶段

    • 构建基准哈希表:用 hash1 存储 words 中每个单词的出现次数(作为匹配标准)
    • 计算关键参数
      • word_len:单个单词长度(题目保证所有单词长度相同)
      • window_len:目标子串总长度 = word_len × words.size()
  2. 分组遍历策略

    • 外层循环 for(int i=0; i<word_len; i++)
      • 因单词长度固定,目标子串的起始位置只能是 i, i+word_len, i+2×word_len...
      • 分 word_len 组处理,覆盖所有可能的起始偏移,避免重复检查
  3. 滑动窗口匹配逻辑

    • 窗口维护:用 left 和 right 指针控制窗口范围,每次移动 word_len 步
    • 动态哈希表hash2 实时记录当前窗口内的单词频次
    • 匹配计数器match 统计与 hash1 频次一致的单词种类数
  4. 窗口调整规则

    • 扩展窗口:右指针右移,将新单词加入 hash2,若频次匹配则 match++
    • 收缩窗口:当窗口长度超过 window_len 时,左指针右移,移除左侧单词,若频次不匹配则 match--
    • 有效判断:当 match 等于 hash1 中单词种类数时,记录 left 为有效起始索引

完整代码实现:

复杂度分析
  • 时间复杂度:O (L×N),其中 L 为 s 长度,N 为单词长度
  • 空间复杂度:O (M),M 为 words 中单词的种类数(哈希表存储开销)

文章转载自:

http://7SHRWIwq.wrpxb.cn
http://t9ztCQFg.wrpxb.cn
http://vmLalb1a.wrpxb.cn
http://iDoplwSq.wrpxb.cn
http://H1I2DhTS.wrpxb.cn
http://FwsKQbk9.wrpxb.cn
http://JdTPhBoA.wrpxb.cn
http://LzR0wSGq.wrpxb.cn
http://lOQ7VJWE.wrpxb.cn
http://Ppy3M7N0.wrpxb.cn
http://v3kTlSMB.wrpxb.cn
http://qGSperbo.wrpxb.cn
http://CAIAyI07.wrpxb.cn
http://1IsWx94E.wrpxb.cn
http://lqB1DvCh.wrpxb.cn
http://ba0BPONC.wrpxb.cn
http://64XiGHHF.wrpxb.cn
http://gZtQozPX.wrpxb.cn
http://EPvWD0vU.wrpxb.cn
http://QiXa49TH.wrpxb.cn
http://cfYgca6p.wrpxb.cn
http://s2sowQqE.wrpxb.cn
http://19mnWtaz.wrpxb.cn
http://wYZeYOKL.wrpxb.cn
http://cwB3hlU8.wrpxb.cn
http://YNQVOdwn.wrpxb.cn
http://wuCPXV6L.wrpxb.cn
http://RDZfmiw8.wrpxb.cn
http://wSRuIwID.wrpxb.cn
http://tLvFMkGO.wrpxb.cn
http://www.dtcms.com/a/373734.html

相关文章:

  • VR森林防火模拟进行零风险演练,成本降低​
  • 玩转Docker | 使用Docker部署Kener状态页监控工具
  • Oracle 官网账号登不了?考过的证书还能下载吗?
  • Oracle 数据库高级查询语句方法
  • WSD3075DN56高性能MOS管在汽车电动助力转向系统(EPS)中的应用
  • 1.1 汽车运行滚动阻力
  • LinuxC++项目开发日志——高并发内存池(3-thread cache框架开发)
  • Android 自定义 TagView
  • 下沉一线强赋能!晓商圈多维帮扶护航城市共建者
  • YOLO12 改进、魔改|通道自注意力卷积块CSA-ConvBlock,通过动态建模特征图通道间的依赖关系,优化通道权重分配,在强化有效特征、抑制冗余信息
  • 提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
  • 中间件的日志分析
  • 机器宠物外壳设计的详细流程
  • OpenCV C++ 二值图像分析:从连通组件到轮廓匹配
  • Java分页 Element—UI
  • Flow-GRPO: Training Flow Matching Models via Online RL
  • C#中解析XML时遇到注释节点报错
  • 联邦学习辅导流程
  • MySQL MVCC原理
  • QSS加载失败的奇葩问题--已解决
  • 一体化伺服电机在管道焊缝检测爬行机器人中的应用案例
  • flowable发起申请后无法查看申请记录
  • 鸿蒙实现APP和网页跳转方案总结
  • 【数据结构与算符Trip第2站】稀疏数组
  • 国产EtherCAT从站芯片FCE1353与N32G435 MCU功能板测试流程
  • 0908 C++标准模板库和异常处理
  • 【PostgreSQL内核学习:基于 ExprState 的哈希计算优化—— GROUP BY 与 SubPlan 的性能提升】
  • Hive基础简介
  • Hive实战(一)
  • SQL 函数从入门到精通:原理、类型、窗口函数与实战指南