思路
维护一个窗口,不断滑动,最后更新答案。
思路比较简单,但是细节很多。比如如何向窗口内添加新的元素,如何缩小窗口,在窗口滑动的哪个阶段更新结果等等。
框架代码
public void slidingWindow(String s, String t) {
HashMap<Character, Integer> window = new HashMap<>();
HashMap<Character, Integer> need = new HashMap<>();
for (char c : t)
need.put(c, window.getOrDefault(c, 0) + 1);
int left = 0, right = 0;
int res = 0;
while (right < s.length()) {
// c是将移入窗口的字符
char c = s.charAt(right);
//增大窗口
right++;
//进行窗口内数据的一系列更新
···
//判断左侧窗口是否收缩
while (window needs shrink) {
//d是将移出窗口的字符
char d = s.charAt(left);
//缩小窗口
left++;
//进行窗口内数据的一系列更新
···
}
}
}