Leetcode算法練習 筆記記錄
- 76. 最小覆蓋子串
76. 最小覆蓋子串
滑動窗口的hard題目,思路先找到第一個覆蓋的窗口,不斷縮小左邊界,找到更小的窗口并記錄。
思路很簡單,寫起來就不是一會事了,看題解看了幾個h,還是太菜了,這題得重點標記一下。 還是參考靈神的。靈神b站
public String minWindow(String s, String t) {String ans = "";if (t.length() > s.length()) {return ans;}int[] arrayT = new int[128];int[] arrayS = new int[128];for (int i = 0; i < t.length(); i++) {arrayT[t.charAt(i)]++;}int min = Integer.MAX_VALUE;int left = 0;for (int right = 0; right < s.length(); right++) {arrayS[s.charAt(right)]++;while (checkExist(arrayS, arrayT)) {if (right - left < min) {min = right - left;ans = s.substring(left, right + 1);}arrayS[s.charAt(left)]--;left++;}}return ans;}private boolean checkExist(int[] arrayS, int[] arrayT) {for (int i = 'A'; i <= 'Z'; i++) {if (arrayS[i] < arrayT[i]) {return false;}}for (int i = 'a'; i <= 'z'; i++) {if (arrayS[i] < arrayT[i]) {return false;}}return true;}