题解 | #最小覆盖子串# 算滑动窗口吗?
最小覆盖子串
https://www.nowcoder.com/practice/c466d480d20c4c7c9d322d12ca7955ac
import java.util.*; public class Solution { /** * * @param S string字符串 * @param T string字符串 * @return string字符串 */ public String minWindow (String S, String T) { if (S.equals(T)) return S; if (S.length() < T.length()) return ""; //滑动窗口 HashMap<Character, Integer> hashMap = new HashMap<>(); HashMap<Character, Integer> windows = new HashMap<>(); char[] SC = S.toCharArray(); char[] ST = T.toCharArray(); //将T放入哈希表中 for (int i = 0; i < ST.length; i++) { hashMap.put(ST[i], hashMap.getOrDefault(ST[i], 0) + 1); } int min = Integer.MAX_VALUE; int start = 0; for (int i = 0; i < SC.length; i++) { if (hashMap.containsKey(SC[i])) { int left = i; while (left <= SC.length) { if (windows.equals(hashMap)) { if (min > left - i) { min = left - i; start = i; } break; } if (left==SC.length) break; if (hashMap.containsKey(SC[left])) { int w = windows.getOrDefault(SC[left], 0); int h = hashMap.get(SC[left]); if (w != h) windows.put(SC[left], windows.getOrDefault(SC[left], 0) + 1); } left++; } windows.clear(); } } return min == Integer.MAX_VALUE ? "" : S.substring(start, min + start); } }