给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。
本题采用滑动窗口法解题,left指向子串左端,right指向子串右端,使用set容器记录出现过的字符。
若ringht所指字符未出现过,则将当前子串长度与最长子串长度作对比,然后把当前字符加入set容器中,right右移。
若right所指字符出现过,则将left所指字符从容器中删除,left右移。
代码如下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len = s.size();
if(len <= 1) return len;
set<char> set;
int left = 0, right = 1;
int res = 1;
set.insert(s[0]);
while(right < len) {
if(set.find(s[right]) != set.end()){
set.erase(s[left]);
left++;
}else{
res = max(res, right - left + 1);
set.insert(s[right]);
right++;
}
}
return res;
}
};