滑动窗口类似单调队列,但是一般的滑动窗口写法更加简单,大致思路为设置边界为右边界为数组边界,每次向右移一个,若不满足要求一直移动左边界直到满足条件
个人写法:
int lengthOfLongestSubstring(string s) {
int n=s.size();
map<char,int> m;
for(int i=0;i<n;++i)
m[s[i]]=0;
int ans=0;
for(int i = 0, j = 0; j < n; j++){
m[s[j]]++;
while(m[s[j]] > 1){ //本题为最长无重复字符子串,别的题目可以更改条件
m[s[i]]--;
i++;
}
ans = fmax(ans, j - i + 1);
}
return ans;
}