class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
for(int i=0;i<s.length();i++) {
answer[i]=-1;
}
for (int i=0;i<s.length();i++) {
for (int j=i+1; j<s.length();j++) {
if (s.charAt(i) == s.charAt(j)) {
answer[j]=j-i;
}
}
}
return answer;
}
}
처음에 헤쉬맵을 써서 키-밸류 로 풀어봐야겠다고 생각했으나,
풀다가 보니 굳이..? 라는 생각이 들게되었다.
answer을 미리 -1로 초기화 해놓고,
이중 for문을 돌려서 중복되는 값이 생기면, answer[j]에 i와j의 차이만큼을 answer로 바로 넣어주면 되겠구나 싶었다.
간단!
import java.util.*;
class Solution {
public int[] solution(String s) {
int[] answer = new int[s.length()];
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);
}
return answer;
}
}
이렇게 헤쉬맵을 사용했다면 getOrDefault 을 사용하면 된다는 것을 알았다.
getOrDefault: 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드
getOrDefault(Object key, V DefaultValue)
answer[i] = i-map.getOrDefault(ch,i+1); 를 설명해보자면
중복되는 단어라면 answer[i]에는 이미 들어있던 value와 i 만큼의 차이가 삽입되어야하니까,
i-value --> i - map.get(ch)
중복이 안된다면 디폴트로 -1이 들어가야 하니까,
i-x = -1 --> x=i+1