题目:给定一个字符串,找出其中不含有重复字符的最长子串的长度
方法:这类题应用“滑动窗口法”,比如:abcabcbb,进入这个队列(窗口)为abc满足题目要求,当再进入a,队列变成了abca,这时候不满足要求,把队列的左边的元素一出来就行,一直为此这样的队列,找出队列出现最长的长度时候,求出,时间复杂度:O(n);
class Solution {
public:
int lengthOfLongestSubstring(string s) {
// cout << s[0] << endl;
// cout << s.size() << endl;
if(s.size() == 0)
return 0;
int left = 0;
int maxLength = 0;
unordered_set<char>set;
for(int i = 0; i < s.size(); i++)
{
//此时s[i] = a,如果在其他位置发现了已经存在的字符a,说明出现了重复,
//就把left对应的字符从set中删去,然后left右移一位
while(set.find(s[i]) != set.end())
{
set.erase(s[left]);
left ++;
}
maxLength = max(i, i - left + 1);
set.insert(s[i]);
}
return maxLength;
}
};