1. 程式人生 > 實用技巧 >LeetCode76. 最小覆蓋子串

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); } }