class Solution {
public:
int lengthOfLongestSubstring(string s) {
int maxsize = 0;
int num = 0;
int n = s.size();
int rk=-1;
unordered_set<char> ooc; //建立哈希set表
for(int i=0;i<n;i++)
{
if(i!=0) //通过移除最左边的元素来向后移动
{
ooc.erase(s[i-1]);
}
while(rk+1<n&&!ooc.count(s[rk+1])) //用来判断最长子串的长度
{
ooc.insert(s[rk+1]);
rk++;
}
maxsize=max(maxsize,rk-i+1); //长度就是rk-i+1
}
return maxsize;
}
};
这里对我来说有个重要的事情就是对于记录最长字串的长度,我最先打算用一个变量num来计算,每次进入while都num++,出来更新maxsize以后就num清零,但是照着这个写法是无法正确计算出字串长度的,所以用rk-i+1来记录长度比较明智。