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

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

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

思路

滑动窗口

解题过程

通过滑动窗口来判断最长字串,起初窗口的左(l)右(r)边界都在第一个字母位置,并且将字母存入一个Map数组用来判重(也可以用Set)。
之后就开始滑动,右边界一直往右扩大,扩大的同时把经过的字母存入Map数组,存入之前判断是否有已经存在的字母了,如果说明以左边这个字母(s[l])为开头的无重复子串已经达到最长子串了,然后左边界就需要开始缩减(向右移动),直到找到与右边界目前所处位置的字符相同的字符为止,然后把该字符剔除,然后左边界再右移一位,从该位置当作开头,右边界接着重新继续滑动。
依次反复,每找到依次重复的,当前的长度就和ans取一次max。

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

Code

class Solution { public int lengthOfLongestSubstring(String s) { int ans = 1; int len = s.length(); if (len == 0) ans = 0; int l = 0; int r = 0; Map<Character,Integer> count = new HashMap<>(); while(r < len) { if (count.containsKey(s.charAt(r))) { ans = Math.max(ans, r - l); while(l < len && s.charAt(l) != s.charAt(r)) { count.remove(s.charAt(l)); l++; } count.remove(s.charAt(l)); l++; } else { count.put(s.charAt(r),1); r++; } } ans = Math.max(ans, len - l); return ans; } }
大佬们有更好方法希望能评论区指点一下~
http://www.cnnetsun.cn/news/8751.html

相关文章:

  • 【高并发场景下的秘密武器】:ASP.NET Core 9 WebSocket压缩协议实战落地
  • RAG实践指南:一文搞定大模型RAG过程
  • 一份全面的AI_Agent知识地图
  • 软件、硬件的兼容性的测试,你知多少?
  • 【翻译】【SOMEIP-SD】Page37 - Page39
  • Raft算法(二)
  • 一文讲透大模型应用开发:新时代技术核心竞争力人人都能掌握!
  • 创维E900V21E/E900V21C/E900V21D/E900V22E_S905L3B_安卓9.0_当贝桌面线刷固件包
  • AI如何读懂语义?从One-hot到Embedding,揭秘文字概念理解技术演进!
  • Debye-Wolf积分计算器
  • 为啥网站跳转重定向是307 而不是 301 呢?
  • Zabbix监控模板实战指南:从零构建企业级监控体系
  • RulersGuides.js:网页设计中的Photoshop式标尺与辅助线终极指南
  • 如何快速掌握MagicEdit:高保真视频编辑的终极指南
  • 基于STM32的辅助病床智慧监护系统设计(有完整资料)
  • AI音频分离技术深度解析:Ultimate Vocal Remover的多轨处理革命
  • 5大理由告诉你为什么Bookworm是Linux用户必备的电子书阅读器
  • UDP通信
  • 如何快速制作专业有声书:abogen开源工具的完整指南
  • Matlab 基于光流场的交通流量分析与应用
  • 如何运用Transformer架构实现高效图像生成
  • 阿里自研Wan2.2-T2V-A14B模型深度解析:文本到视频的革命性突破
  • MySQL从入门到精通系列保姆级教程,带你嗨翻天
  • 5个移动端推荐引擎性能瓶颈及突破方案
  • 复杂网络与模糊逻辑粒子群优化毕业论文【附代码】
  • 【毕业设计】基于springboot高校工作室管理系统高等教育机构的工作室管理(源码+文档+远程调试,全bao定制等)
  • uni-app插件市场深度ROI分析:如何用组件化降低70%开发成本
  • 5、汇编语言中的数学与位操作
  • 靠谱的PC耐力板公司有哪些
  • 深入解析C#方法:从基础到高级应用