题目链接
思路分析
最长不含重复子字符串,要明确是如何判断是否重复,我们就可以采用set进行去重
- 我们确定了使用set来进行去重,我们就需要来考虑如何选择子字符串,对于字符串选择,我们采用双指针来进行区间选择
- 最后我们要选择如何对于处理出现重复的情况,当出现重复时,我们就计算当前区间长度,并将左指针++,然后继续进行判断
代码实现
set + 双指针
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> set;
int left = 0;
if(s.size() < 2)
return s.size();
int right = 1;
int ret = 0;
set.insert(s[left]);
while(right < s.size())
{
while(right < s.size() && set.find(s[right]) == set.end())
{
set.insert(s[right++]);
}
ret = max(ret, right -left);
set.erase(s[left++]);
}
return ret;
}
};