defsolution(gems):gems_len=len(gems)gem_kind_len=len(set(gems))result_obj={}result_range=(0,float("inf"))left=0right=0whileTrue:# 모든 보석
ifgem_kind_len==len(result_obj):# 더 범위가 짧다면
ifresult_range[1]-result_range[0]>right-left:result_range=(left,right)temp_key=gems[left]result_obj[temp_key]-=1ifresult_obj[temp_key]==0:delresult_obj[temp_key]left+=1# rgith는 이미 오른쪽 최대에서 1칸 넘어간 상태 && 모든 보석 아님
elifright==gems_len:breakelse:temp_key=gems[right]result_obj[temp_key]=result_obj.get(temp_key,0)+1right+=1return[result_range[0]+1,result_range[1]]