题目
思路
- 第一步:根据条件先扩大窗口,直至满足条件为止,然后进行第二步。
- 第二步,再收缩窗口,直至不满足条件为此,此时又回到第一步。
- 最后根据条件终止
代码
最小覆盖子串public String minWindow(String s, String t) {int len = s.length(), count = t.length();if (len < count) return "";HashMap<Character, Integer> map = new HashMap<>();for (int k = 0; k < count; k++) {char ch = t.charAt(k);map.put(ch, map.getOrDefault(ch, 0) + 1);}int l = -1, r = len;//扩大窗口for (int i = 0, j = 0; j < len; j++) {char key = s.charAt(j);if (map.containsKey(key)) {int val = map.get(key);map.put(key, val - 1);if (val > 0) count--;}//收缩窗口while (count == 0) {if (r - l > j - i + 1) {r = j + 1;l = i;}char c = s.charAt(i);if (map.containsKey(c)) {int val = map.get(c);map.put(c, val + 1);if (val >= 0) count++;}i++;}}return l == -1 ? "" : s.substring(l, r);}
