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

LeetCode - 无重复字符的最长子串

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

示例 1:

输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。注意 “bca” 和 “cab” 也是正确答案。

示例 2:

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

示例 3:

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

提示:

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

我的答案

class Solution {public int lengthOfLongestSubstring(String s) {int head = 0, tail = 0, maxSubLength = 0, strLength = s.length();Map<String, Integer> subStrMap = new HashMap<>();while (tail < strLength) {String headChar = String.valueOf(s.charAt(head));if (head == tail) {subStrMap.put(headChar, head);tail++;continue;}String tailChar = String.valueOf(s.charAt(tail));if (!subStrMap.containsKey(tailChar)) {subStrMap.put(tailChar, tail);tail++;continue;}maxSubLength = Math.max(tail - head, maxSubLength);head = subStrMap.get(tailChar) + 1;int finalHead = head;subStrMap.entrySet().removeIf(item-> item.getValue() < finalHead);subStrMap.put(tailChar, tail);if (tail == strLength - 1) {break;}tail++;}return Math.max(s.substring(head, tail).length(), maxSubLength);}
}

我的题解

我看了官方的题解和其他题解,感觉我的不是最优解,这里只是做一个记录

思路

开始想不出来…
后来想着类似于链表新增数据一样,用两个节点:一个头节点、一个尾节点
通过尾节点遍历字符串,遍历到一个新的字符时,判断一下重不重复
重复?就重新定位头结点
不重复?尾节点 + 1,继续遍历
为了省点时间,决定浪费点空间,用 HashMap 存储

解题过程

1)初始,头节点和尾节点都在索引为 0 的位置开始遍历
2)第一个节点的时候,先把字符存起来,保留字符位置,然后尾节点 + 1,然后下一次遍历
3)得到新字符之后,先判断存不存在(重不重复)?
4)不重复?存储字符,保留字符位置,尾节点 + 1,继续下一次遍历
5)重复?先得到当前头节点和尾节点之间的字符长度,然后和最大字符长度比较,取最大
6)头节点要取 Map 中和尾节点重复字符的索引 + 1 。为啥?比如说,abcdefghie… 字符串,如果遍历到最后一个 e 的时候遇到了重复,那么下一次头节点直接从 f 开始,f 就是 Map 中和尾节点重复字符的索引 + 1 对应的字符(这样,跳过了头节点的遍历)
7)把头节点之前的数据都清除掉,因为后面还要判重,头节点要重新开始,重新判断新的字符串,就要清空 Map 的数据
8)把新的尾节点数据放进去,再判断下是否继续给尾节点 + 1。因为到最后的时候,已经没有字符串需要遍历了,如果再给尾节点 + 1,会导致结果 + 1

复杂度

  • 时间复杂度:𝑂(𝑁)
  • 空间复杂度:𝑂(𝑁)
http://www.dtcms.com/a/538429.html

相关文章:

  • ELK3——kibana
  • 国内购物网站大全濮阳新闻综合频道直播
  • 互联壹佰做企业网站网站快速排名公司
  • 乐清建设网站公司制作一个网站
  • 企业黄页信息查询网seo详细教程
  • 做墙绘一般在哪个网站做医药商城网站的公司吗
  • 广州冼村地铁站几号线网页制作源代码
  • 2025级SYUCT-ACM新生第二次训练 题解
  • 英文网站建设之后怎么推医疗器械分类目录2021
  • 朝阳网站建设 高碑店什么行业最需要网站建设
  • 网站推广优化招聘计算机网络设计是干什么的工作
  • 深圳企业网站制作流程wordpress小工具编辑
  • 曲靖程序网站建设中国教学网站
  • 网站定制开发特点wordpress首页广告位
  • 【Linux】信号的产生,保存,捕捉机制
  • 网站建设详细流程视频温州市手机网站制作多少钱
  • 福州网站怎么做的私活网站开发多少钱
  • 河南做网站的公司有哪些seo公司网站
  • 做asp网站需要的实验报告单做的网站上更改内容改怎么回事
  • 网站建设教程出售用苏州久远网络禹城做网站的
  • 深圳模板网站南通网站开发
  • 网站栏目名称大全用jsp做视频网站
  • 做设计找图有哪些网站有哪些问题企业网站被黑后如何处理
  • Kubernetes入门学习
  • 大模型学习2
  • 【论文学习与撰写】Mathtype的安装与word插件安装
  • 小企业网站建设的基础知识小型企业做网站的价格
  • 怀化本地网站网站如何做免费推广
  • 网站适配怎么做主机如何做服务器建网站
  • 网站网页设计培训百度站长平台网址