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

无重复字符的最长子串,leetCode热题100,C++实现

题目来源:leetCode

3. 无重复字符的最长子串 - 力扣(LeetCode)

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。

解法

class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_set<char> charSet;  // 存储当前窗口内的字符int left = 0;                 // 窗口左边界int maxLength = 0;            // 记录最大长度// 右指针遍历整个字符串for (int right = 0; right < s.size(); right++) {// 当发现重复字符且窗口大小至少为2时,收缩左边界while (left < right && charSet.count(s[right]) > 0) {charSet.erase(s[left]);  // 移除左边界字符left++;                  // 左指针右移}// 将当前字符加入窗口charSet.insert(s[right]);// 更新最大长度maxLength = max(maxLength, right - left + 1);}return maxLength;}
};

采用滑动窗口法,我们有一个left和一个right指针,表示窗口的两个边界,我们不断的移动right指针,当遇到重复元素时,开始移动left指针,直到left指针移动到重复元素的下一个位置为止

比如abcdaeft,其实left和right都指向a,然后right不断移动,当right指向第二个a时,开始移动left,left会指向b,此时就没有重复元素了

left < right && charSet.count(s[right]) > 0

核心代码是这一块,left<right可以保证窗口大小至少为2,如果left==right,则窗口只有一个字符,不重复,也不会进入while循环

count可以看做是find,会返回元素出现的次数,也就是有重复时才会进入while循环

http://www.xdnf.cn/news/1420669.html

相关文章:

  • Vue3响应式陷阱:如何避免ref解构导致的响应式丢失
  • 电动自行车车架前叉振动、组合件冲击、把立管弯曲强度试验机等机械强度性能测试项目解析
  • 【趣味阅读】Python 文件头的秘密:从编码声明到 Shebang
  • Spring事务管理策略对比与性能优化实践指南
  • AI辅助论文写作,在《人工智能生成合成内容标识办法》出台后的新规则
  • HarmonyOS 应用开发深度实践:深入 Stage 模型与 ArkTS 声明式 UI
  • Linux - JDK安装
  • 刷题之链表oj题目
  • 突破超强回归模型,高斯过程回归!
  • 大语言模型对齐
  • VMware pro16(许可证)+centos 7超详细安装教程
  • MQ使用场景分析
  • 【RK3576】【Android14】PMIC电源管理
  • DVWA靶场通关笔记-SQL Injection Blind(SQL盲注 Impossible级别)
  • kubectl-etcd
  • 【C++】内存管理机制:从new到delete全解析
  • 植物中lncRNA鉴定和注释流程,代码(包含Identified,Classification,WGCNA.....)
  • 开发中使用——鸿蒙CoreSpeechKit语音识别
  • 基于MCP架构的OpenWeather API服务端设计与实现
  • C#在物联网GPS经纬度转换为百度地图地址
  • 亚马逊云代理商:如何选择适合的AWS EC2实例类型?
  • CVE Push Service | 高危漏洞实时情报自动化推送工具
  • Vue基础知识-使用监视属性watch和计算属性computed实现列表过滤+排序
  • 【golang长途旅行第35站】Redis
  • docker中的命令(六)
  • 针对redis中的热数据该怎么处理
  • ✝常用表格✝
  • Simulink库文件-一种低通滤波模块搭建方法
  • 【stm32】定时器(超详细)
  • 重构导航之核:高德地图的深度学习架构解析 导论:从数字化世界到可计算世界