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 };