[プログラマー]宝石を買う



import java.util.*;
class Solution {
    public int[] solution(String[] gems) {
        int[] answer = new int[2];
        HashMap<String,Integer> map = new HashMap<>();
        HashMap<String,Integer> map2 = new HashMap<>();
        int size =0;
        int n = gems.length;
        
        for(int i=0; i<n; i++){
            map2.put(gems[i],0);
        }
        
        size = map.size();
        int m =0;
        int temp = Integer.MAX_VALUE;
        int start =0;
        LinkedList<String> list = new LinkedList<>();
        for(int i=0; i<n; i++){
            
            if(m>=size){
                int gemCnt = map2.get(gems[i]);
                map2.put(gems[i], gemCnt+1);
                list.offer(gems[i++]);
            }
            
            while(m<size){
                int gemCnt = map2.get(gems[i]);
                if(gemCnt==0){
                    m++;
                    map2.put(gems[i],1);
                }else{
                    map2.put(gems[i], gemCnt+1);
                }
                list.offer(gems[i++]);
                if(i==n) break;
            }
            
            while(map2.get(list.get(0))>1){
                map2.put(list.get(0), map2.get(list.get(0))-1);
                list.poll();
                start++;
            }
            
            if(temp>list.size()){
                    temp = list.size();
                    answer[0] = start+1;
                    answer[1] = i;
            }
            i--;
        }

        return answer;
    }
}