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

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

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));

相关文章:

  • 手机入网时长查询接口:精准风控与用户运营的智能利器
  • 深入理解 PlaNet(Deep Planning Network):基于python从零实现
  • ffmpeg 转换视频格式
  • 【MySQL成神之路】MySQL插入、删除、更新操作汇总
  • 掌握正则表达式:从基础语法到工程实践
  • 使用gradio创建LLM模型聊天Demo
  • 如何在 Mac M4 芯片电脑上卸载高版本的 Node.js
  • 【论文阅读】——AN EXPRESSIVE REPRESENTATION OF GENERAL 3D SHAPES
  • 网页 CSS美化(详解)
  • 机器学习圣经PRML作者Bishop20年后新作中文版出版!
  • python 绘制3D平面图
  • 【前端】每日一道面试题4:什么是CSS容器查询(Container Queries)?与媒体查询有何区别?
  • CSS:vertical-align用法以及布局小案例(较难)
  • Spark SQL、Hive SQL运行流程解析及对比
  • Linux环境基础开发工具->vim
  • Paimon和Hive相集成
  • Java的Filter与Spring的Interceptor的比较
  • vim以及vi编辑器常用快捷键指令
  • DDS与PLL技术
  • [Harmony]实现JSON与类的双向转换
  • 广告设计图片简单/天津搜索引擎seo
  • 专业的网站建设设计价格/seo提供服务
  • 毕设做网站怎么样/个人网站的制作模板
  • 那些开店的网站是自己做的吗/南京seo网站优化
  • 景区网站建设原则/百度号码认证申诉平台
  • 百度网站建设多少钱/微信运营工具