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

LeeCode 3. 无重复字符的最长子串

经典方法滑动窗口:(两个指针)

针对这个题我们首先假定两个指针 left 和 right 分别指在数组最左端.

然后两个变量记录长度length和maxlength.

并且因为不能有重复的字符,我们使用HashSet结构来当收集结果的表.

随着右指针不断往右移,左指针和右指针之间的就为截取的字符,而这个区域我们可以称之为"窗口"

下面举个例子:

以右指针为条件向右遍历,最开始指向的是a,我们把a取出来放到表中,这时length加一,maxlength也加一.

然后右指针移动,同理,遍历到b也加到表中,length加一,maxlength也加一

c也如此.

而当我们右指针再次遍历到b这个字符时,因为Set中已经有这个字符了我们就要让左指针移动,来实现不重复的字符,也就是"滑动的窗口"此时移动之前的左右指针之间的字符为abc.

而当左指针移动时,左右指针的字符为bc,我们把表中a字符删去,右指针判断表中还有b,自己还不能加,所以左指针继续遍历.

因为左指针遍历到的是b,此时表中的字符为bc,我们把b删去,length也要减一,但max的不变.而右指针看到表中已经有b,所以左指针继续遍历,到下一个

此时表中只c而ab都没有了,右指针看到b没有了,就可以把b加到表中,

这个时候表中为bc,length可以加1,.然后右指针继续遍历.

后面所有过程都和上述一样.

右指针遍历到d,左指针到第二个b时,此时最大

但是右指针还要继续遍历,直到遍历完整个字符.

此时遍历条件结束,我们就可以返回最大的无重复字符子串.

代码如下:

class Solution {public int lengthOfLongestSubstring(String s) {// 哈希集合,记录每个字符是否出现过Set<Character> set = new HashSet<>();int left = 0;int maxLength = 0;int right = 0;while(right < s.length()) {char currentChar = s.charAt(right);    // 如果当前字符已经在集合中,移动左指针直到移除该字符while (set.contains(currentChar)) {set.remove(s.charAt(left));left++;}// 将当前字符加入集合set.add(currentChar);// 更新最大长度maxLength = Math.max(maxLength, right - left + 1);//当前左右指针截取的字符长度和最大的比较//右指针右移right++;}return maxLength;}
}

注意这里使用CharAt方法来截取每个字符,传入的值是字符在字符串的的下标.

结束.

http://www.lryc.cn/news/441819.html

相关文章:

  • 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步
  • VMware Workstation Pro 17下载及安装教程
  • 集采良药:从“天价神药”到低价良药,伊马替尼的真实世界研究!
  • 00898 互联网软件应用与开发自考复习题
  • linux 进程间通信之pthread(条件变量共享和互斥锁共享)
  • 数据结构-2.7.单链表的查找与长度计算
  • iotop 命令:磁盘IO监控和诊断
  • 解锁编程新境界:GitHub Copilot 让效率翻倍
  • 爱普生相机SD卡格式化后数据恢复指南
  • 【数据结构】排序算法---基数排序
  • 二叉树(下)
  • 计算机网络33——文件系统
  • 算法:76.最小覆盖子串
  • DNS服务
  • STM32 HAL freertos零基础(九)任务通知
  • Qt+FFmpeg开发视频播放器笔记(三):音视频流解析封装
  • 从黎巴嫩电子通信设备爆炸看如何防范网络电子袭击
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16
  • 12 - TCPServer实验
  • Explain执行计划
  • ARM/Linux嵌入式面经(三六):中科曙光
  • Python和C++气候模型算法模型气候学模拟和统计学数据可视化及指标评估
  • 鸿蒙开发城市联动选择弹框
  • css 控制虚线刻度尺寸
  • NLP三天入门大模型,我领先你好几个版本了
  • 专题六_模拟_算法详细总结
  • ArrayList的扩容机制
  • 一、编译原理(引论)
  • 【Javascript修炼篇】JS中的函数式编程
  • spring cxf 常用注解