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

【LeetCode:3】无重复字符串的最长子串(Java)

题目链接

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

题目描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。

示例 1:

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

求解思路

  • 滑动窗口:规定i为左指针,rk为右指针,每次for循环左指针向右移动一格,然后通过while循环来找到以i为起点的最长无重复子串长度,并通过哈希集合来存储当前区间内的不重复元素,以便下次遍历的时候可以重复使用。

实现代码

class Solution {public int lengthOfLongestSubstring(String s) {// 哈希集合,记录每个字符是否出现过Set<Character> occ = new HashSet<Character>();int n = s.length();// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动int rk = -1, ans = 0;for (int i = 0; i < n; ++i) {if (i != 0) {// 左指针向右移动一格,移除一个字符occ.remove(s.charAt(i - 1));}while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {// 不断地移动右指针occ.add(s.charAt(rk + 1));++rk;}// 第 i 到 rk 个字符是一个无重复字符子串ans = Math.max(ans, rk - i + 1);}return ans;}
}
http://www.lryc.cn/news/429137.html

相关文章:

  • C#对字典使用Linq查询
  • 【Vue】Vue基础
  • 贪心 + 分层图bfs,newcoder 76652/B
  • 如何在Linux上部署Java Web应用程序
  • SpringBoot 整合 Excel 轻松实现数据自由导入导出
  • PyTorch 基础学习(13)- 混合精度训练
  • Mycat分片-垂直拆分
  • 一元四次方程求解-【附MATLAB代码】
  • 【极限性能,尽在掌控】ROG NUC:游戏与创作的微型巨擘
  • Ecosmos开启公测,将深度赋能CIOE中国光博会元宇宙参会新体验
  • 【Kubernetes】k8s集群之包管理器Helm
  • 嵌入式linux系统镜像制作day3(构建镜像)
  • 【生日视频制作】教师节中秋节国庆节车模特美女举牌AE模板修改文字软件生成器教程特效素材【AE模板】
  • RongCallKit iOS 端本地私有 pod 方案
  • C++11:可变参数模板
  • C++ 与 QML 之间进行数据交互的几种方法
  • Javaweb学习之Vue项目的创建(二)
  • 『深度长文』4种有效提高LLM输出质量的方法!
  • 【工业机器人】工业异常检测大模型AnomalyGPT
  • 【PGCCC】PostgreSQL案例:planning time超长问题分析#PG初级
  • 【图文并茂】ant design pro 如何给后端发送 json web token - 请求拦截器的使用
  • 【微信小程序】自定义组件 - behaviors
  • Linux ubuntu 24.04 安装运行《帝国时代3》免安装绿色版游戏,解决 “Could not load DATAP.BAR”等问题
  • Springboot 图片
  • LIMS实验室管理系统如何实现数据自动采集
  • 全自动商用油炸锅介绍:
  • CE修改器的简单使用
  • element-plus el-cascader懒加载怎么指定对应的label和value。最后一级怎么判断?
  • pdf查看密码
  • 从bbl和overleaf版本解决Arxiv提交后缺失参考文献Citation on page undefined on input line