可以用滑动窗口在做,每次向前滑动,窗口里不含有重复的字符,窗口的最大值就是子串的最大长度。需要用unordered_set<char>来存储窗口中的字符。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char>cset;
int n=s.length(),ans=0,left=0;//left表示窗口的左侧
for(int right=0;right<n;right++)//right表示窗口的右侧
{
char c=s[right];//新加入的
while(cset.count(c)>0)//判断是否已经在窗口中重复了
{
cset.erase(s[left]);//如果重复了就不断把窗口的左侧往右缩小,直到不重复
left++;
}
cset.insert(c);
ans=max(ans,right-left+1);//每次计算一下ans
}
return ans;
}
};