1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
import java.util.HashMap; import java.util.Map;
class Solution { public String minWindow(String s, String t) { Map<Character, Integer> need = new HashMap<>(); Map<Character, Integer> window = new HashMap<>(); for (char charArray : t.toCharArray()) { need.put(charArray, need.getOrDefault(charArray, 0) + 1); } int left = 0, start = 0, valid = 0, len = Integer.MAX_VALUE; for (int right = 0; right < s.length(); right++) { char RChar = s.charAt(right); if (need.containsKey(RChar)) { window.put(RChar, window.getOrDefault(RChar, 0) + 1); if (window.get(RChar).equals(need.get(RChar))) { valid++; } } while (valid == need.size()) { if (right - left + 1 < len) { len = right - left + 1; start = left; } char LChar = s.charAt(left++); if (window.containsKey(LChar)) { if (window.get(LChar).equals(need.get(LChar))) { valid--; } window.put(LChar, window.get(LChar) - 1); } } } return len == Integer.MAX_VALUE ? "" : s.substring(start, start + len); } }
|