이때 모든 보석을 하나 이상 포함하는 가장 짧은 구간의 길이를 찾는 문제이다.
투포인터 알고리즘을 사용해야 한다..
// 시작위치, 증가 구간 넓이, 현재 구간 넓이
int start = 0, count = 0, interval = Integer.MAX_VALUE;
HashSet<String> set = new HashSet<>(); // 보석의 종류 개수
HashMap<String, Integer> map = new HashMap<>(); // 보석 종류당 보석 등장 개수
Queue<String> q = new LinkedList<>(); // 구간안의 보석
for (int i = 0; i < gems.length; i++) {
map.put(gems[i], map.getOrDefault(gems[i], 0) + 1);
q.add(gems[i]);
while (map.get(q.peek()) > 1) {
map.put(q.peek(), map.get(q.poll()) - 1);
count++;
}
if (map.size() == set.size() && interval > i - count) {
interval = i - count;
start = count + 1;
}
}
문제를 보고 어떻게 투포인터를 바로생각해내야 하는걸까