//滑动窗口 classSolution { publicint minSubArrayLen(int target, int[] nums) { int result = 1000000001; int start = 0; intsum = 0; for(int i = 0; i < nums.length;i++){ sum += nums[i]; while(sum >= target){ int in_result = (i - start) + 1; result = result < in_result ? result : in_result; sum -= nums[start++]; } } return result == 1000000001 ? 0 : result; } }
class Solution { public String minWindow(String s, String t) { int sn = s.length(); int tn = t.length();
int start = 0; int minLen = Integer.MAX_VALUE; String result = "";
Map<Character, Integer> tDict = new HashMap<>(); for (int i = 0; i < tn; i++) { tDict.put(t.charAt(i), tDict.getOrDefault(t.charAt(i), 0) + 1); }
Map<Character, Integer> windowDict = new HashMap<>(); int formed = 0; // 记录窗口中满足条件的字符数量
int left = 0; int right = 0;
while (right < sn) { char c = s.charAt(right); windowDict.put(c, windowDict.getOrDefault(c, 0) + 1);
if (tDict.containsKey(c) && windowDict.get(c).intValue() == tDict.get(c).intValue()) { formed++; }
while (left <= right && formed == tDict.size()) { // 更新最小窗口长度和结果 int curLen = right - left + 1; if (curLen < minLen) { minLen = curLen; result = s.substring(left, right + 1); }