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

力扣-无重复字符的最长子串

1.题目描述

2.题目链接

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

3.题目解析

本题中我们还是使用滑动窗口来解决。

那么为什么使用滑动窗口来解决呢?

对于这样一个数组,我们定义双指针都指向数组第一个元素。left表示无重复字符的最长子串的起始位置,right遍历数组表示无重复字符的最长子串的结束位置。

对于这种需要去重的问题,我们通常的解法是定义1个HashSet,把left到right之间的元素都存入HashSet中,如果发现HashSet中已经包含了right下标的元素,就把left指针移动到重复元素的位置。 

同时,left也不必再从right下标开始遍历,直接从left+1位置开始遍历即可。

不断更新length,也就是取原始length和right-left+1的最小值,直到right遍历完数组,返回length即可。

我们分析问题发现,全部过程中,left和right双指针都无需回退,所以我们不使用普通双指针,而是使用滑动窗口。 

4.代码细节

1) set的泛型类型

 Set<Character>set=new HashSet<>();

String类型取下标得到的是char类型,所以我们定义set的泛型应该是Character(注意不是char)。

2)加入set中

无论right元素是否在哈希表中,我们都应该把right下标的元素添加到哈希表中,因为即使right下标的元素存在于哈希表中,我们后续也会通过移动left指针至重复元素的下一位。

 set.add(s.charAt(right));

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

相关文章:

  • Golang 内存模型小结
  • Qt 最新版6.9.0使用MQTT连接腾讯云详细教程
  • window 显示驱动开发-视频内存供应和回收(一)
  • jquery.table2excel方法导出
  • 鸿蒙仓颉开发语言实战教程:实现商城应用首页
  • 尼科彻斯定理
  • Vue 3.0中自定义指令
  • 01-jenkins学习之旅-window-下载-安装
  • 【云原生安全】零信任与机密计算
  • Qt C++实现马的遍历问题
  • 【JavaEE】(1) 计算机如何工作
  • 阿里巴巴 MCP 分布式落地实践:快速转换 HSF 到 MCP server
  • 记录:uniapp 上线部署到微信小程序vendorjs包过大的问题
  • 外网如何连接内网中的mysql数据库服务器?简单网络工具方案
  • Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment
  • 【C++】位图+布隆过滤器
  • JAVA EE(进阶)_CSS
  • 如何排查服务器 CPU 温度过高的问题并解决?
  • C++ 前缀和数组
  • C++STL(二)类模板
  • YCKC【二分查找专题】题解
  • 《对话记忆的进化史:智能体大模型如何实现跨轮次的深度交互》
  • 国酒华夏实业酒水供应链:全品类覆盖打造一站式购销平台
  • 第四十三节:人脸检测与识别-人脸识别基础 (Eigenfaces, Fisherfaces, LBPH)
  • Selenium自动化测试终极指南:从原理到实战
  • 【Python生成器全解析】从基础到高阶应用实战
  • C语言—Linux环境下CMake设置库(动态/静态)
  • 借助IEDA ,Git版本管理工具快速入门
  • 多线程(七)
  • 开疆智能Profinet转RS485网关连接工业型土壤水分温度传感器 配置案例