import java.util.Arrays;
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
//알파벳 배열 -> -1로 초기화하고 나오면 위치값을 저장 -> 동일한 알파벳이 나오면(-1이 아니면) {현재 위치-저장된 값} 출력 후 현 위치 저장
int[] word = new int[26];
Arrays.fill(word,-1);
for(int i=0;i<s.length();i++){
int index = s.charAt(i) - 'a';
//word 값이 -1이면 현재 위치 넣고 아니면 {현재 위치-값} 넣기
if(word[index] == -1){
answer[i] = word[index];
word[index] = i;
}
else{
answer[i] = i-word[index];
word[index] = i;
}
}
return answer;
}
}
다른 방법으로 HashMap을 사용하여 getOrDefault를 사용할 수 있다.
HashMap<Character,Integer> map = new HashMap<>();
for(int i=0; i<s.length();i++){
char ch = s.charAt(i);
answer[i] = i-map.getOrDefault(ch,i+1);
map.put(ch,i);
}
map에서 ch값을 가져온다.
만약 map에 ch값이 없다면 i+1을 가져온다.
i-ch값 혹은 i-(i+1)로 현위치에서 그 전 위치값을 빼거나 없으면 -1이 출력되게 한다.
put을 통해 map의 값을 업데이트 한다.