LeetCode3. 无重复字符的最长子串

题目

分析

用滑动窗口,就是双指针来做。设 i 为串的尾指针,符合题目要求的串的左侧指针为 j ,且 i 指针向后移动时,j 指针可能不动或者向右移动。

用哈希表来存 从 j 到 i 部分的每个字符的次数,如果 i + 1 重复的话,那么冲突的一定是 位置  i 和 i + 1 部分冲突,这时 j 需要往前移动,移动

到没有哈希表重复为止。

代码

复制代码
 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         unordered_map<char,int>heap;
 5         int res = 0;
 6         for(int i = 0,j = 0;i < s.size();i++){
 7             heap[s[i]]++; //尾指针往后移动,同时更新哈希表
 8             while(heap[s[i]] > 1){  
 9                 //出现重复字符 , 窗口开始滑动,头部指针 j 开始往后移动,直到没有重复为止
10                 heap[s[j]]--;
11                 j++;
12              }
13             res = max(res,i - j + 1);
14         }
15 
16         return res;
17     }
18 };
复制代码

 

posted @   Uitachi  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-03-01 日期差值
2021-03-01 字符串内排序
2021-03-01 EXCEL排序
2021-03-01 特殊排序
2021-03-01 成绩排序
2021-03-01 排序
点击右上角即可分享
微信分享提示