LeetCode76. 最小覆蓋子串
阿新 • • 發佈:2020-12-08
一、題目描述
☆☆☆☆二、解法
思路:滑動視窗。 時間複雜度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 = newint[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); } }