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

[优选算法专题二滑动窗口——无重复字符的最长子串]

题目链接

无重复字符的最长子串

题目描述

题目解析

问题背景

"无重复字符的最长子串" 问题要求在一个字符串中找到最长的不包含重复字符的连续子串,并返回其长度。这是一个经典的字符串处理问题,滑动窗口算法是解决该问题的最优方案。

算法核心思想

该算法采用滑动窗口 (Sliding Window) 结合哈希表 (Hash Table) 的方式:

  • 滑动窗口由左右两个指针界定,代表当前正在检查的子串
  • 右指针主动扩展窗口,探索新的字符
  • 当遇到重复字符时,左指针被动收缩窗口,确保窗口内始终无重复字符
  • 哈希表用于记录窗口内每个字符的出现次数,快速判断是否有重复

代码关键部分解析

  1. 哈希表的作用

unordered_map<char, int> ans;

这里的哈希表用于记录当前窗口中每个字符的出现次数,而不是字符的位置,这是一种常见的实现方式。

2.右指针移动:

for (int left = 0, right = 0; right < n; right++) {char c = s[right];ans[c]++;// ...
}

右指针每次向右移动一位,将新字符加入窗口并更新其计数。

3.处理重复字符:

while (ans[c] > 1) {ans[s[left]]--;left++;
}

当新加入的字符导致重复(计数 > 1)时,通过移动左指针并减少相应字符的计数,直到窗口内不再有重复字符。

4.更新最长长度:

len = max(len, right - left + 1);

每处理一个新字符后,都要检查当前窗口是否是最长的,并更新结果。

完整代码

核心思路:滑动窗口 + 哈希表

  1. 滑动窗口:用leftright两个指针表示当前正在处理的子串区间,right主动右移扩展窗口,left被动右移缩小窗口以保证窗口内无重复字符。
  2. 哈希表作用:实时记录窗口内每个字符的出现次数,当right指向的字符出现次数超过 1 时,通过移动left并减少对应字符的计数,直到窗口内无重复字符。
  3. 时间复杂度:每个字符最多被leftright各访问一次,因此为 O (n)(n 为字符串长度)。

注意事项

  • 哈希表ans的键是字符,值是该字符在当前窗口中的出现次数,而非索引(与另一种用哈希表存索引的实现方式不同)。
  • 循环条件while (ans[c] > 1)确保窗口内始终无重复字符,此时计算窗口长度并更新结果。
http://www.lryc.cn/news/622208.html

相关文章:

  • 介绍TCP的拥塞控制
  • 【Go语言-Day 36】构建专业命令行工具:`flag` 包入门与实战
  • 用Qt自带工具windeployqt快速打包程序
  • 龙蜥邀您参加 AICon 全球人工智能开发与应用大会,探索 AI 应用边界
  • 2020 GPT3 原文 Language Models are Few-Shot Learners 精选注解
  • [Chat-LangChain] 会话图(LangGraph) | 大语言模型(LLM)
  • JAVA 关键字
  • 清除 pnpm 缓存,解决不同源安装依赖包失败的问题
  • 银河麒麟服务器jar包部署自启动配置
  • 如何在 Ubuntu 24.04 Noble LTS 上安装 Apache 服务器
  • 第十八讲:哈希2
  • Navicat 询问 AI | 轻松修复 SQL 错误
  • vector接口模拟实现及其原理
  • linux程序编译笔记
  • 软件重构的破与立:模式方法创新设计与工程实践
  • 达梦数据库使用控制台disql执行脚本
  • QML实现数据可视化
  • Nginx蜘蛛请求智能分流:精准识别爬虫并转发SEO渲染服务
  • redis-保姆级配置详解
  • 机器学习案例——《红楼梦》文本分析与关键词提取
  • 103、【OS】【Nuttx】【周边】文档构建渲染:Sphinx 配置文件
  • RabbitMQ核心架构与应用
  • Nginx性能优化与安全配置:打造高性能Web服务器
  • 模型驱动与分布式建模:技术深度与实战落地指南
  • 【慕伏白】CTFHub 技能树学习笔记 -- Web 前置技能之HTTP协议
  • 【Docker】搭建一个高性能的分布式对象存储服务 - MinIO
  • LeetCode热题100--146.LRU缓存--中等
  • 附046.集群管理-EFK日志解决方案-Filebeat
  • 20250815在荣品RD-RK3588-MID开发板的Android13下点卡迪的7寸LCD屏
  • 商城开发中,有哪些需要关注的网络安全问题