尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

滑动窗口经典题目解析【持续更新】

滑动窗口经典题目解析【持续更新】
📅 发布时间:2026/6/18 17:37:32

1.无重复的最长子串

1.1题目链接

无重复的最长子串

1.2题目解析

直接right遍历整个数组,如果遇到不重复的就放进哈希表[字符和对应下标],如果遇到重复 的就让left调整位置 ,一定要确保left到right之间的字符串是没有重复的,至于left跳到哪里 就看到的重复字符是哪个,要取到一个当前left和当前right指向的字符在map存储的下标加一的较大值,如果重复字符的对应下标还是小于当前left的值 那就不用管因为说明重复字符在left的左边,当前这个由right和left构成的窗口依然是合法_也就是不重复的.
所以哈希表的作用就是存储不重复字符的对应下标,以便于right在遇到重复字符left可以快速跳到需要的位置也就是保证left在当前right指向的重复字符的右边,
每次一遍流程结束之后就计算一下当前"窗口"的长度 如果已经超过了最大长度就更新 没有就不更.

1.3代码实现

classSolution{publicintlengthOfLongestSubstring(Strings){intlength=s.length();intmax_length=0;Map<Character,Integer>map=newHashMap<>();for(intleft=0,right=0;right<length;right++){charfgs=s.charAt(right);//不存在if(!map.containsKey(fgs)){map.put(fgs,right);}//存在else{left=Math.max(left,map.get(fgs)+1);map.put(fgs,right);}intnewLength=right-left+1;if(newLength>max_length){max_length=newLength;}}returnmax_length;}}

2.找到字符串中所有异位词

2.1题目链接

找到字符串中所有异位词

2.2题目解析

关键在于已知两个字符串怎么区比较他们是否相同,还要考虑字母顺序不同的情况,最简单的方法其实就是搞个哈希表,记录该字符串每个字符和对应出现的次数,如果都能对得上直接就判定他们是相同的.
所以我们其实可以先将p的字符串搞成一个目标哈希表,然后初始化一下窗口这个哈希表,注意长度要是目标哈希表的减一,然后for循环遍历s,进窗口就是那right对应字符放进哈希表 ,此时窗口哈希表的长度刚好符合目标哈希表,然后直接equals方法对比 如果相同就说明当前窗口是异位词的子串,然后添加left即可
滑动的效果就是对比之后left向前走一步,同时将哈希表中left对应字符出现次数减一即可.(如果刚好是1就直接删除这个键值对).

2.3代码实现

classSolution{publicList<Integer>findAnagrams(Strings,Stringp){intsLength=s.length();intpLength=p.length();List<Integer>list=newArrayList<>();if(pLength>sLength){returnlist;}//初始化目标哈希表Map<Character,Integer>targetMap=newHashMap<>();for(inti=0;i<pLength;i++){charfgs=p.charAt(i);//不存在if(!targetMap.containsKey(fgs)){targetMap.put(fgs,1);}//存在else{targetMap.put(fgs,targetMap.get(fgs)+1);}}//初始化对比哈希表Map<Character,Integer>map=newHashMap<>();for(inti=0;i<pLength-1;i++){charjwy=s.charAt(i);if(!map.containsKey(jwy)){map.put(jwy,1);}//存在else{map.put(jwy,map.get(jwy)+1);}}//开始遍历s字符串for(intleft=0,right=pLength-1;right<sLength;right++){chardmm=s.charAt(right);if(!map.containsKey(dmm)){map.put(dmm,1);}//存在else{map.put(dmm,map.get(dmm)+1);}//开始对比if(targetMap.equals(map)){list.add(left);}//left出窗口if(map.get(s.charAt(left))==1){map.remove(s.charAt(left));}if(map.containsKey(s.charAt(left))){map.put(s.charAt(left),map.get(s.charAt(left))-1);}left++;}returnlist;}}

相关新闻

  • 完整教程:50天精通FPGA设计-总体规划
  • 两种核心消息队列:环形队列与RTOS消息队列解析
  • AI元人文构想的诗意阐释

最新新闻

  • LevelDB dumpfile工具深度解析:揭秘Google高性能键值存储的底层数据格式
  • AI驱动Web自动化测试:Stagehand框架原理、实战与避坑指南
  • 天津钻石回收门店排行榜|禹竞名奢汇稳居榜首,本地变现首选靠谱商家 - 名奢变现站
  • 免费开源GUI原型设计终极指南:Pencil Project从入门到精通
  • 2026太阳镜品牌推荐榜:品质与格调兼具的十大之选 - 品牌评测官
  • 高效Windows系统优化工具Win11Debloat:三步实现系统清理与性能提升

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号