目录
2. Sliding Windows Optimization
3.1 substring without repeating characters
1. Algorithm Analysis
- Create a window [left, right)
- Increasing right edge to expand the window and update the matching results
- if the window big enough, increasing left edge to shrink the window and update the result
- Repeat step 2 and 3, until right edge reach end of input
1.1 Implementation Template
vector<int> letter(128,0);
for(auto c:target) {
letter[c]++;
}
int l = 0, r = 0;
int matched = 0;
while(r < input.size()) {
char c = input[r++]; //expend the window
if(letter[c] > 0)
matched++;
letter[c]--; // non target char will be negative
if(r-l == target.size()) { //condition to shrink the window
if(matched == target.size())
ans.push_back();
//shrink window
if(letter[input[l++]++ > 0)
matched--;
}
}
return and;
1.2 Usual question variation
1.2.1 longest subarray or substring
1.2.2 shortest subarray or substring
1.2.3 max/min median in a fixed window