这题用滑动窗口写,定义一个unordered _set来存放字符,left和right分别指窗口的左边界和右边界,通过windou.count来判断右边界的字符是否出现过,如果存在则将左边界不断缩小直到该字符不存在为止,每次循环都插入右边界的字符,用ans=max(ans,right-left+1)来记录答案的最大值。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char>window;
int n=s.size(),left=0,right=0,ans=0;
while(right<n){
while(window.count(s[right])){
window.erase(s[left++]);
}
window.insert(s[right]);
ans=max(ans,right-left+1);
right++;
}
return ans;
}
};