3. 无重复字符的最长子串
滑动窗口思想:
如对于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