문자열을 순회하면서 HashMap에 {해당 문자=인덱스}를 넣고, 접근해서 결과를 도출
➡️ HashMap에 해당 문자가 저장되지 않았으면 한 번도 나온 적이 없는 문자 => result배열에 -1 저장
➡️ HashMap에 해당 문자가 있으면 value값(가장 최근 인덱스)과 현재 문자의 인덱스 값의 차이를 result배열에 저장
import java.util.Arrays;
import java.util.HashMap;
public class CloseCharacter {
public int[] solution(String s) {
HashMap<Character, Integer> alpha = new HashMap<>();
int[] result = new int[s.length()];
for (int i = 0; i < s.length(); i++) {
if (!alpha.containsKey(s.charAt(i))) result[i] = -1;
else result[i] = i - alpha.get(s.charAt(i));
alpha.put(s.charAt(i), i);
}
return result;
}
public static void main(String[] args) {
CloseCharacter closeCharacter = new CloseCharacter();
System.out.println(Arrays.toString(closeCharacter.solution("banana"))); // [-1, -1, -1, 2, 2, 2]
System.out.println(Arrays.toString(closeCharacter.solution("foobar"))); // [-1, -1, 1, -1, -1, -1]
}
}