这题是因为学到了 unordered_set 写的,这里不用其实也可以,重要的是理解代码的思路。
我们每拿到一个字符就在 set 里面找,如果能找到,就说明有重复的,就要一直删除到没有重复为止。
如果没有重复,就将这个值插入到 set 里面。
如果你不会用 set,那你可以想想,这个 set 是做什么的。
它保存了我们要比较的字符串,然后还要能查找。
如果能满足这两个条件,其他都是可以代替的。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.size() == 0)
return 0;
unordered_set<char> se;
int count = 0;
int left = 0;
for(int i = 0;i<s.size();i++)
{
while(se.find(s[i]) != se.end())
{
se.erase(s[left]);
left++;
}
count = max(count,i-left+1);
se.insert(s[i]);
}
return count;
}
};