
leetcode 刷题 题3. 无重复字符的最长子串
发布日期:2021-05-20 10:42:24
浏览次数:22
分类:精选文章
本文共 954 字,大约阅读时间需要 3 分钟。
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例:输入:“pwwkew”,输出:3。解释:最长的子串是“wke”,长度为3。
解决方案:滑动窗口法核心思路是使用两个指针left和right,left指针指窗口的左端,right指针扩展到尽可能远的位置。当遇到重复字符时,移动left指针到右重复字符的下一个位置,继续扩展right,维护一个不含重复字符的窗口。
如何实现:使用unordered_set数据结构记录当前窗口中出现过的字符。当遇到重复字符时,循环移除左侧重复字符,直到不再包含重复字符。然后移动left指针到下一个位置,继续扩展窗口。
代码参考:
int lengthOfLongestSubstring(string s) { int left = 0; int max_len = 0; unordered_setchar_set; // 存储当前窗口中字符 if (s.empty()) { return 0; } for (int right = 0; right < s.size(); ++right) { if (char_set.find(s[right]) != char_set.end()) { // 当前字符已经存在,移除左侧的重复字符 while (char_set.find(s[right]) != char_set.end()) { char_set.erase(char_set.begin()); left++; } } char_set.insert(s[right]); max_len = max(max_len, right - left + 1); } return max_len;}
优化点:
- 使用unordered_set来记录字符,确保快速查找重复字符。
- 当遇到重复字符时,通过循环移除左侧字符,保持窗口有效性。
- 计算并更新最长窗口长度,保持代码简洁。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月22日 13时50分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
降级到旧版本macOS的3种方法
2019-03-15
学习Vue.js2.0(国外视频教程)
2019-03-15
wxPython和PyOpenGL视频
2019-03-15
在30分钟内学习PHP
2019-03-15
OpenStack 最小化安装配置(一):物理机网桥配置
2019-03-15
PS快速美白照片
2019-03-15
ubuntu 16.04 镜像下载
2019-03-15
CUDA9.1、cuDNN7在Ubuntu16.04上的安装
2019-03-15
微信小程序云开发:怎么删除云函数?已解决
2019-03-15
第一次被黑
2019-03-15
PyCharm配置anaconda环境
2019-03-15
SpringBoot与缓存(JSR-107、Spring缓存抽象)
2019-03-15
ERROR 总结
2019-03-15
查找最小值栈的O(1)
2019-03-15
Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
2019-03-15
概念唱片Plastic Beach封面高清壁纸
2019-03-15
旅游后期效果Ography Lightroom预设
2019-03-15