题解 | #最长无重复子数组#
最长无重复子数组
http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
class Solution {
public:
/**
*
* @param arr int整型vector the array
* @return int整型
*/
int maxLength(vector<int>& arr) {
unordered_map<int, int> window;
int l = 0,r = 0, res = 0;
while (r < arr.size()) {
int t = arr[r];
r++;
// 进行窗口内数据的更新
window[t]++;
// 判断左窗口是否需要更新
while (window[t] > 1) {
int s = arr[l];
l++;
// 进行窗口内数据的更新
window[s]--;
}
res = max(res, r - l);// 更新结果
}
return res;
}
}; 滑动窗口阶梯框架:
/* 滑动窗口算法框架 */
void slidingWindow(string s, string t) {
unordered_map<char, int> need, window;
for (char c : t) need[c]++;
int left = 0, right = 0;
int valid = 0;
while (right < s.size()) {
// c 是将移入窗口的字符
char c = s[right];
// 右移窗口
right++;
// 进行窗口内数据的一系列更新
...
/*** debug 输出的位置 ***/
printf("window: [%d, %d)\n", left, right);
/********************/
// 判断左侧窗口是否要收缩
while (window needs shrink) {
// d 是将移出窗口的字符
char d = s[left];
// 左移窗口
left++;
// 进行窗口内数据的一系列更新
...
}
}
}
