对于不重复的字符串问题,主要难点在于采用滑动窗口和集合的灵活运用
- 首先i作为左指针,逐步向左移动,每移动一次,就把前面的从集合里面移走。
- 然后设置rk为右指针,逐步遍历。
- 如集合里面无当前元素,且指针在该字符串的长度范围内,则将该元素插入,继续移动。
- 输出imax。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n=s.size();
set<char> occ;
int imax=0;
int rk=-1;
for(int i=0;i<n;i++)
{
if(i!=0)
{
occ.erase(s[i-1]);
}
while(rk+1<n && !occ.count(s[rk+1])){
occ.insert(s[rk+1]);
rk++;
}
imax=max(imax,rk-i+1);
}
return imax;
}
};