码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-05 00:59:01      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:操作   size   滑动窗口   窗口   不重复   find   longest   长度   class   

滑动窗口思想:

如对于abcabcab,无重复字符的最长字串为abc,长度为3。使用滑动窗口思想,当窗口为abc时,再进入a,队列变为abca,不满足要求,需要移动窗口。移动的方法为抛弃最左边的字符,即a,持续该操作,直到序列末尾。

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         if (s.size() == 0)
 5             return 0;
 6         else{
 7             int left = 0,maxlen = 0;
 8             unordered_set<char> lookup;
 9             for (int i=0;i<s.size();i++){
10                 while(lookup.find(s[i]) != lookup.end()){ //当在lookup中能够找到s[i]时,需要移动窗口
11                     lookup.erase(s[left]);
12                     left++;
13                 }
14                 maxlen = max(maxlen,i-left+1);
15                 lookup.insert(s[i]);        //不要忘记添加字符到lookup中
16             }
17             return maxlen;
18         }
19     }
20 };

注:unordered_set用来判断只去重不重复的需求(set是一个内部自动有序且不含重复元素的容器)。

此处用到的unordered_map用法:find,end,erase,insert

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

标签:操作   size   滑动窗口   窗口   不重复   find   longest   长度   class   

原文地址:https://www.cnblogs.com/thefatcat/p/11623760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!