无重复字符的最长子串(滑动窗口)
给定一个字符串 s
,请你找出其中不含有重复字符的最长子串的长度。
示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
思路:滑动窗口,外层循环移动左指针,内层循环移动右指针,需要注意的是要先判断右指针所指字符是否重复,如果重复就不要移动,所以right的初始值为-1.
class Solution { public: int lengthOfLongestSubstring(string s) { set<char> st; int maxLen=0; int right=-1; int n = s.size(); //枚举左指针的位置 for(int left=0;left<n;left++){ if(left!=0){ //当一个字串长度找到,去除字串开头的字符 st.erase(s[left-1]); } while(right+1<n&&st.count(s[right+1])==0){//右指针所指字符不存在 st.insert(s[right+1]); ++right; //右指针向右移动 } //右指针所指字符存在,计算长度 maxLen = max(maxLen,right-left+1); } return maxLen; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具