LeetCode76. 最小覆盖子串
一、题目描述
☆☆☆☆二、解法
思路:滑动窗口。 时间复杂度O(n)
和LeetCode438. 找到字符串中所有字母异位词属于同一类型的题,滑动窗口的套路就是 扩张->满足条件->收缩
class Solution { public String minWindow(String s, String t) { if (s == null || s.length() < t.length()) return ""; int[] dict = new int[128]; // ASCII表总长128 int[] cur = new int[128]; int l = 0, r = 0; int count = 0; int start = 0, minLen = s.length() + 1; for (char c : t.toCharArray()) { dict[c] ++; } while (r < s.length()) { char c = s.charAt(r); cur[c] ++; if (cur[c] <= dict[c]) { // 关键点1 count ++; } while (count == t.length()) { // 左指针收缩 if (r - l + 1 < minLen) { minLen = r - l + 1; start = l; } cur[s.charAt(l)] --; if (cur[s.charAt(l)] < dict[s.charAt(l)]) { // 关键点2 count --; } l ++; } r ++; } return minLen > s.length() ? "" : s.substring(start, start + minLen); } }