https://school.programmers.co.kr/learn/courses/30/lessons/160586
HashMap과 HashSet을 통해서 구현했습니다.
HashSet을 사용한 이유는 문자가 있는지 탐색할때 Map보다는 훨씬 빠른속도로 탐색 할 수있기때문에 있는지 체크할경우는 Set을 통해서 진행했습니다.
만약 그 문자가 있는경우에는 HASHMAP의 문자가 가지고 있는 idx값과 비교해서 현재 문자가 원래 들어있던 idx보다 작은경우 갱신해주고 아닌경우 넘어가줍니다.
그리고 나서 target의 각 문자에 대해서 체크하여서 HashSet의 문자가 없는경우는 -1을 리턴하고 아닌경우 count에 값을 더해줘서 전부 구하게 되면 그 target배열의 idx에 맞는 answer 배열에 넣어줘서 저장해두고 전부 구했을경우 리턴해줍니다.
HashMap,HashSet
import java.util.HashMap;
import java.util.HashSet;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int[] answer = new int[targets.length];
HashMap<Character,Integer> map = new HashMap<>();
//있는지 없는지 체크용도
HashSet<Character> check = new HashSet<>();
for(int idx = 0; idx <keymap.length;idx++){
for(int start = 0; start < keymap[idx].length();start++){
char alpha = keymap[idx].charAt(start);
//이미 idx를 가지고 존재할경우
if(check.contains(alpha)){
if(map.get(alpha) > start+1){
map.put(alpha,start+1);
}
}else {
check.add(alpha);
map.put(alpha,start+1);
}
}
}
for(int idx= 0;idx<targets.length;idx++){
int count = 0;
for(int start = 0; start < targets[idx].length();start++){
if(!check.contains(targets[idx].charAt(start))){
count = -1;
break;
}
count += map.get(targets[idx].charAt(start));
System.out.println(count);
}
answer[idx] = count;
}
return answer;
}
}