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