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

LeetCode刷题笔记 | 3 | 无重复字符的最长子串 | 双指针 | 滑动窗口 | 2025兴业银行秋招笔试题 | 哈希集合

🙋大家好!我是毛毛张!
🌈个人首页: 神马都会亿点点的毛毛张
这是一道银行的面试题,就是简单?!

LeetCode链接:3. 无重复字符的最长子串

1.题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 0 < = s . l e n g t h < = 5 ∗ 1 0 4 0 <= s.length <= 5 * 10^4 0<=s.length<=5104
  • s 由英文字母、数字、符号和空格组成

2.题解

  • 盲猜暴力解法肯定超时,毛毛张就不在这里介绍了
  • 这个题目只需要最长子串的长度,做完可以尝试一下这道题目:LeetCode:67.最小覆盖子串

2.1 双指针-哈希集合

class Solution {public int lengthOfLongestSubstring(String s) {// 使用一个Set来存储当前子串中的字符Set<Character> set = new HashSet<>();// 初始化左右指针和最大长度int left, right;int maxLen = 0;// 从左到右遍历字符串for (left = 0, right = 0; right < s.length(); right++) {// 获取当前字符Character c = s.charAt(right);// 如果当前字符不在Set中,更新最大长度if (!set.contains(c)) {maxLen = Math.max(maxLen, right - left + 1);}// 如果当前字符在Set中,则移动左指针直到没有重复字符while (set.contains(c)) {set.remove(s.charAt(left));left++;}// 将当前字符添加到Set中set.add(c);}// 返回最大长度return maxLen;}
}

2.2 双指针-哈希数组

  • 如果能用哈希集合,那么大概率也可以使用哈希数组
class Solution {public int lengthOfLongestSubstring(String s) {// 使用一个大小为128的整数数组来记录字符出现的次数int[] arr = new int[128];// 初始化左右指针和最大长度int left, right;int maxLen = 0;// 从左到右遍历字符串for (left = 0, right = 0; right < s.length(); right++) {// 获取当前字符char c = s.charAt(right);// 如果当前字符在数组中的计数为0,更新最大长度if (arr[c] == 0) {maxLen = Math.max(maxLen, right - left + 1);}// 如果当前字符在数组中的计数不为0,则移动左指针直到没有重复字符while (arr[c] != 0) {arr[s.charAt(left)]--;left++;}// 将当前字符的计数加1arr[c]++;}// 返回最大长度return maxLen;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 连接未来:幂简集成引领API新时代
  • 大数据技术原理-Hadoop的安装
  • c++ 初始值设定项列表(initializer_list)
  • 大模型日报 2024-08-03
  • 解决电脑缺少.NET组件?手把手教你轻松解决
  • Go语言实现多协程文件下载器
  • 【Java 第六篇章】泛型
  • 聚鼎科技:装饰画怎么做盈利更快
  • C# 实现改造 GooFlow 流程图插件与数据库应用的结合
  • Linux系统性能调优实战:从基础到进阶的全方位指南
  • 【C++修炼之路 第七章】模拟实现 list 类模板
  • redis面试(四)ZSet数据结构
  • JavaScript输出数据的方法?
  • uniApp跳转外链
  • 密码学基础-数据加密
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Angular6错误 Service: No provider for Renderer2
  • avalon2.2的VM生成过程
  • docker容器内的网络抓包
  • express + mock 让前后台并行开发
  • JS基础之数据类型、对象、原型、原型链、继承
  • MQ框架的比较
  • node学习系列之简单文件上传
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • overflow: hidden IE7无效
  • Protobuf3语言指南
  • Python_网络编程
  • Sass 快速入门教程
  • sessionStorage和localStorage
  • Sublime Text 2/3 绑定Eclipse快捷键
  • text-decoration与color属性
  • web标准化(下)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 微信小程序:实现悬浮返回和分享按钮
  • 项目管理碎碎念系列之一:干系人管理
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • gunicorn工作原理
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​Python 3 新特性:类型注解
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #数据结构 笔记三
  • (C语言)fread与fwrite详解
  • (Git) gitignore基础使用
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (图)IntelliTrace Tools 跟踪云端程序
  • (新)网络工程师考点串讲与真题详解
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .gitignore文件—git忽略文件