문제
https://school.programmers.co.kr/learn/courses/30/lessons/142086
접근 방법 및 풀이
문자열 0번째부터 진행 하면서 앞쪽의 같은 문자의 유무를 탐색하게 되면 이중 루프로 구현을 해야 하며 그렇게 된다면 최악의 시나리오에서 효율성이 좋지 않음
문자열을 0번째부터 그 문자와 index를 저장하는 Map을 활용하여 현재 index와 해당 문자의 바로 전 index를 Map에서 조회하여 처리
import java.util.HashMap;
import java.util.Map;
public class Q30_142086 {
public int[] solution(String s) {
int length = s.length();
int[] answer = new int[length];
Map<String, Integer> indexMap = new HashMap<>();
String[] strings = s.split("");
for (int i = 0; i < length; i++) {
String temp = strings[i];
if (!indexMap.containsKey(temp)) {
answer[i] = -1;
} else {
int index = indexMap.get(temp);
answer[i] = i - index;
}
indexMap.put(temp, i); // 인덱스 갱신
}
return answer;
}
}