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

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

思路:哈希表+滑动窗口

其实就是双指针和哈希表的综合运用而已.

为什么需要用哈希表呢?自己也是一步一步试出来的:我们如果暴力解的话,就是三重循环,超出时间限制;可以想到用双指针优化时间复杂度.但是,当我们在判断重复字符的时候,左指针和右指针指向的字符相同的时候,会想着把左指针移动,右指针不变,这样的话就没有什么重复元素的存在了.

但是,在pww这种字符的情况下,我们可以看到,上述方法是不成效的,因为这个时候左指针始终不移动,但是重复元素还是存在.导致变成了只和左指针指向的元素进行比较的局限性问题.因此这种方法不可取.

究其原因,.就是因为我们只比较了左指针指向的元素和右指针是否相同而已,而忽略了字符串的整体是怎样的.那么我们就会联想到,用哈希表来处理这个问题.既然不能暴力又想把这个字符串的整体都顾及到,就只能采用哈希.

做法就是用左右指针进行遍历,将遍历过的元素下标存储到哈希表中.

哈希的作用就是储存每个已经遍历过的元素的位置下标,一旦我们再次遍历到一个元素,这个元素在哈希表中已经有对应的存储,我们就需要把左指针移动到哈希表存储的这个元素的下标处,然后计算这个时候的字符串长度是多少.因为一旦有重复元素,说明在重复元素之前的元素就不能用了,我们就直接移动指针到这个元素上就可以了(题目中的子串是连续的).以此类推,边遍历,边判断,同时计算子串的长度.

class Solution {public int lengthOfLongestSubstring(String s) {Map<Character,Integer>map=new HashMap<>();int l=-1;int r=0;int res=0;while(r<s.length()){if(map.containsKey(s.charAt(r))){l=Math.max(l,map.get(s.charAt(r)));}res=Math.max(res,r-l);map.put(s.charAt(r),r);r++;}return res;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Oracle事务是怎么练成的
  • 词向量,位置嵌入;归一化;自注意力层;投影;残差连接:防止梯度消失;MLP;
  • Nodejs实现图片加水印 【使用jimp】
  • win7开机提示‘windows引导配置数据文件包含的os项目无效’解决方法
  • pnpm的使用
  • 课程设计/毕业设计Spring boot+vue仓库管理系统(文档、源码、数据库、远程部署、LW)
  • Python——爬虫
  • pve虚拟机使用
  • Vue的事件处理、事件修饰符、键盘事件
  • WordPress个性化站点
  • 学习日志8.10--防火墙ASPF
  • Java毕业设计 基于SSM和Vue的酒店管理系统小程序
  • [Java]面向对象-static继承
  • Java设计模式(命令模式)
  • 今日Java练习:选择题挑战
  • ----------
  • 「面试题」如何实现一个圣杯布局?
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • echarts的各种常用效果展示
  • ES6 学习笔记(一)let,const和解构赋值
  • es6--symbol
  • JavaScript类型识别
  • java第三方包学习之lombok
  • Linux Process Manage
  • Nacos系列:Nacos的Java SDK使用
  • zookeeper系列(七)实战分布式命名服务
  • 代理模式
  • 那些年我们用过的显示性能指标
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • elasticsearch-head插件安装
  • Linux权限管理(week1_day5)--技术流ken
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #07【面试问题整理】嵌入式软件工程师
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (第一天)包装对象、作用域、创建对象
  • (多级缓存)多级缓存
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (力扣)循环队列的实现与详解(C语言)
  • (论文阅读11/100)Fast R-CNN
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十六)串口UART
  • (四)React组件、useState、组件样式
  • (算法)区间调度问题
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world