중복된 원소들이 존재할 수도 있는 배열에서 모든 원소들을 적어도 하나 이상 포함한 가장 짧은 구간을 찾는 문제입니다. 만약 가장 짧은 구간이 여러개일 경우 시작점이 가장 작은 구간을 구해야합니다.
문제 링크
def solution(gems):
answer = [1, len(gems)]
inven = {gem: 0 for gem in set(gems)}
start, end = 0, 0
inven[gems[0]] += 1
need_type = len(inven) - 1
while end < len(gems):
if need_type == 0 and answer[1] - answer[0] > end - start:
answer = start + 1, end + 1
if inven[gems[start]] > 1:
inven[gems[start]] -= 1
start += 1
else:
end += 1
if end < len(gems):
inven[gems[end]] += 1
if inven[gems[end]] == 1:
need_type -= 1
return answer