diff --git a/java/76-Minimum-Window-Substring.java b/java/76-Minimum-Window-Substring.java new file mode 100644 index 000000000..f723e2973 --- /dev/null +++ b/java/76-Minimum-Window-Substring.java @@ -0,0 +1,35 @@ +class Solution { + //sliding window + public String minWindow(String s, String t) { + HashMap map = new HashMap<>(); + + for (char x : t.toCharArray()) { + map.put(x, map.getOrDefault(x, 0) + 1); + } + + int matched = 0; + int start = 0; + int minLen = s.length() + 1; + int subStr = 0; + for (int endWindow = 0; endWindow < s.length(); endWindow++) { + char right = s.charAt(endWindow); + if (map.containsKey(right)) { + map.put(right, map.get(right) - 1); + if (map.get(right) == 0) matched++; + } + + while (matched == map.size()) { + if (minLen > endWindow - start + 1) { + minLen = endWindow - start + 1; + subStr = start; + } + char deleted = s.charAt(start++); + if (map.containsKey(deleted)) { + if (map.get(deleted) == 0) matched--; + map.put(deleted, map.get(deleted) + 1); + } + } + } + return minLen > s.length() ? "" : s.substring(subStr, subStr + minLen); + } +}