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

 1 //双指针算法模板+哈希表
 2 class Solution 
 3 {
 4 public:
 5     int lengthOfLongestSubstring(string s) 
 6     {
 7         unordered_map<char,int> nums;
 8         int res = 0;
 9         for(int i = 0,j = 0;i < s.size();i++)
10         {
11             nums[s[i]]++;
12             while(nums[s[i]] > 1) nums[s[j++]]--;
13             res = max(res,i - j + 1);
14         }
15         return res;
16     }
17 };

 

 1 //直接套用滑动窗口算法模板
 2 class Solution 
 3 {
 4 public:
 5     int lengthOfLongestSubstring(string s) 
 6     {
 7         unordered_map<char,int> window;
 8         int left = 0,right = 0;
 9         int res = 0; //1、为什么设置为0,因为当s为空字符串时,不会执行while循环
10         while(right < s.size())
11         {
12             char c = s[right];
13             right ++;
14             window[c] ++;
15             while(window[c] > 1) //2、注意这里是while,不是if
16             {
17                 char d = s[left];
18                 left ++;
19                 window[d] --;
20             }
21             res = max(res,right - left);
22         }
23         return res;
24     }
25 };

 

posted @ 2020-03-15 18:11  Jinxiaobo0509  阅读(123)  评论(0)    收藏  举报