题目
代码(首刷自解)
算是第一道滑动窗口自解的题目了
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(!s.size())
return 0;
unordered_map<char, int> window;
int left = 0, right = 0;
int res = 1;
while(right < s.size()) {
char c = s[right];
right++;
window[c]++;
while(window[c] > 1) {
char d = s[left];
window[d]--;
left++;
}
res = max(res, right - left);
}
return res;
}
};
代码(8.1 二刷自解)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char, int> window;
int right = 0, left = 0;
int res = 0;
while(right < s.size()) {
char c = s[right];
right++;
window[c]++;
while(window[c] > 1) {
char d = s[left];
left++;
window[d]--;
}
res = max(res, right - left);
}
return res;
}
};
代码(8.30 三刷自解)
class Solution {
public:
int maxLength(vector<int>& arr) {
unordered_map<int, int> need;
int left = 0, right = 0;
int len = 0;
while(right < arr.size()) {
int num = arr[right];
right++;
need[num]++;
while(need[num] > 1) {
int l = arr[left];
left++;
need[l]--;
}
len = max(len, right-left);
}
return len;
}
};
代码(8.3 四刷自解)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(!s.size())
return 0;
unordered_map<char, int> mp;
int left = 0, right = 0;
int len = 1;
while(right < s.size()) {
char c = s[right];
right++;
mp[c]++;
while(mp[c] > 1) {
char d = s[left];
left++;
mp[d]--;
}
len = max(len, right-left);
}
return len;
}
};