
3 、leetcode 无重复字符的最长子串
初始化左指针 遍历字符串,逐个字符处理: 返回最大长度。
发布日期:2021-05-08 19:30:48
浏览次数:23
分类:精选文章
本文共 1215 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到给定字符串中不含有重复字符的最长子串的长度。我们可以使用滑动窗口技术来高效地解决这个问题。
方法思路
我们可以使用滑动窗口技术来解决这个问题。滑动窗口的核心思想是通过两个指针来维护一个窗口,该窗口内的字符都不重复。右指针用于扩展窗口,左指针用于收缩窗口以确保没有重复字符。我们可以使用一个哈希表来记录字符的位置,确保右指针遇到的字符不在当前窗口中。
具体步骤如下:
left
和右指针right
,以及一个哈希表map
来记录字符的位置。- 如果字符已经在哈希表中,且其位置大于等于左指针的位置,则将左指针移动到该字符位置的下一个位置。
- 更新哈希表,记录当前字符的位置。
- 计算当前窗口的长度,如果比之前的最大长度大,则更新最大长度。
这种方法的时间复杂度是O(n),因为每个字符只被访问一次,哈希表的操作也是O(1)时间。
解决代码
import java.util.HashMap;import java.util.Map;public class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); int max_len = 0; MapcharPositions = new HashMap<>(); int left = 0; for (int right = 0; right < n; right++) { char c = s.charAt(right); if (charPositions.containsKey(c)) { left = Math.max(left, charPositions.get(c) + 1); } charPositions.put(c, right); max_len = Math.max(max_len, right - left + 1); } return max_len; }}
代码解释
- 初始化变量:
max_len
记录最大长度,charPositions
哈希表用于记录字符的位置,left
指针初始化为0。 - 遍历字符串:使用右指针遍历字符串中的每个字符。
- 检查字符位置:如果字符已经在哈希表中,且其位置大于等于左指针的位置,则更新左指针。
- 更新字符位置:将当前字符的位置记录到哈希表中。
- 计算窗口长度:每次更新最大长度。
这种方法高效且简洁,能够在O(n)时间复杂度内解决问题。
发表评论
最新留言
不错!
[***.144.177.141]2025年03月22日 12时40分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
等和的分隔子集(DP)
2019-03-06
基础练习 十六进制转八进制(模拟)
2019-03-06
L - Large Division (大数, 同余)
2019-03-06
39. Combination Sum
2019-03-06
41. First Missing Positive
2019-03-06
80. Remove Duplicates from Sorted Array II
2019-03-06
83. Remove Duplicates from Sorted List
2019-03-06
410. Split Array Largest Sum
2019-03-06
开源项目在闲鱼、b 站上被倒卖?这是什么骚操作?
2019-03-06
Vue3发布半年我不学,摸鱼爽歪歪,哎~就是玩儿
2019-03-06
《实战java高并发程序设计》源码整理及读书笔记
2019-03-06
Java开源博客My-Blog(SpringBoot+Docker)系列文章
2019-03-06
程序员视角:鹿晗公布恋情是如何把微博搞炸的?
2019-03-06
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
2019-03-06
Linux应用-线程操作
2019-03-06
多态体验,和探索爷爷类指针的多态性
2019-03-06
系统编程-进程间通信-无名管道
2019-03-06
记2020年初对SimpleGUI源码的阅读成果
2019-03-06