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

LeetCode3☞无重复字符的最长子串

关联LeetCode题号3

本题特点
  • 滑动窗口,哈希,队列
本题思路
  1. 最初想法“统计最长的无重复子串”,必然有逻辑:一旦出现重复子串,之前统计的长度即为无效长度,应该重新统计,即将无效的长度范围内的元素丢弃,重新开始统计
  2. 基于以上想法,决定使用滑动窗口,使用栈为窗口,统计栈中留下的有效子串和之前统计的长度作比较,一旦有重复的则出栈,重新统计长度。
  3. 即 实现窗口滑动是让不符合要求的元素出栈,这样编写会比较麻烦,容易漏掉一些情况
  4. 优化之后的想法:字典作为窗口,使用left,right不断变化来实现滑动,代码简洁
Python写法一
class Solution:def lengthOfLongestSubstring(self, s: str) -> int:if len(s) == 0:return 0maxLength = 1que = []que.append(s[0])for i in range(1, len(s)):if s[i] in que:maxLength = max(maxLength, len(que))while que[0] != s[i]:que.pop(0)que.pop(0)que.append(s[i])if maxLength < len(que):maxLength = len(que)return maxLength
Python优化写法
class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 字典作为窗口hashmap = {}# left right 之间为符合要求的子串 两者变动实现滑动窗口left = 0res = 0for right in range(len(s)):hashmap[s[right]] = hashmap.get(s[right], 0) + 1while hashmap[s[right]] > 1:hashmap[s[left]] = hashmap.get(s[left]) - 1left += 1# right表示当前索引  left表示下一次索引 所以需要加1res = max(res, right-left+1)right += 1return res 
Java写法
class Solution {public int lengthOfLongestSubstring(String s) {Map<Character, Integer> window = new HashMap<>();int left = 0, right = 0;int res = 0;while (right < s.length()){char c = s.charAt(right);right ++;window.put(c, window.getOrDefault(c, 0)+1);while (window.get(c) > 1){char d = s.charAt(left);left ++;window.put(d, window.get(d) - 1);}// right 和left 都是表示的下一次的索引 所以不需要加1res = Math.max(res, right - left);}return res;}
}
http://www.xdnf.cn/news/176869.html

相关文章:

  • 辞九门回忆
  • 深入理解编程中的同步与异步:原理、区别及实战应用
  • Go 语言中的 `select` 语句详解
  • CSS元素动画篇:基于当前位置的变换动画(四)
  • 加密算法 AES、RSA、MD5、SM2 的对比分析与案例(AI)
  • (七)RestAPI 毛子(Http 缓存/乐观锁/Polly/Rate limiting)
  • 【学习笔记1】一站式大语言模型微调框架LLaMA-Factory
  • Vue2 与 Vue3 深度对比与技术解析
  • 黑马点评redis改 part 6
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据信息查看操作
  • 语音识别质量的跟踪
  • 力扣HOT100之链表:23. 合并 K 个升序链表
  • 树状数组单点操作+前缀K差分->区间K操作 -#131-#132
  • SpringBoot + SSE 实时异步流式推送
  • Linux内核中的编译时安全防护:以网络协议栈控制块校验为例
  • mAh 与 Wh:电量单位的深度解析
  • 【Pandas】pandas DataFrame rtruediv
  • 全网直播推介会,九识智能与申通快递达成全面战略合作
  • 20.压敏电阻的特性与使用注意事项
  • RuoYi-Vue项目Docker镜像构建、推送与部署完整流程
  • 云平台+MQTT+C#上位机+单片机通信
  • 在 UniApp 中实现 App 与 H5 页面的跳转及通信
  • lightrag : from lightrag.utils import EmbeddingFunc 报错
  • 04.通过OpenAPI-Swagger规范让Dify玩转Agent
  • 【Redis】set类型
  • JavaEE-多线程实战02
  • AI如何重塑CC防护行业?五大变革与实战策略解析
  • 【创新实训个人博客】multi-agent调研(2)
  • promis(resolve,reject)入门级别
  • 互联网大厂Java面试:从Spring Boot到微服务架构的实践与挑战