해쉬맵을 통해 문자별로 갯수를 새면서 문자가 0이 되는 순간의 문자를 확인하고 최소인지 확인하면 된다. 어렵

import java.util.*;
class Solution {
private int m;
private int n;
private Map<Character, Integer> map;
public String minWindow(final String s, final String t) {
m = s.length();
n = s.length();
map = new HashMap<>();
for(final char c : t.toCharArray()){
map.put(c,map.getOrDefault(c,0) + 1);
}
String answer = "";
int min = Integer.MAX_VALUE;
String subString = "";
for(final char c : s.toCharArray()){
subString += c;
if (map.containsKey(c)) {
map.replace(c, map.get(c) - 1);
}
while(!subString.isEmpty() && (map.getOrDefault(subString.charAt(0),0) < 0 || !map.containsKey(subString.charAt(0)))){
if (map.containsKey(subString.charAt(0))){
map.replace(subString.charAt(0), map.get(subString.charAt(0)) + 1);
}
subString = subString.substring(1);
}
if (isSubString()){
if (subString.length() < min){
answer = subString;
min = subString.length();
}
}
}
return answer;
}
private boolean isSubString(){
for(final int cnt : map.values()){
if (cnt > 0){
return false;
}
}
return true;
}
}