이중 for문을 이용한 풀이
function solution(s) {
var answer = [];
let str = '';
for (let i=0; i<s.length; i++) {
if (str.indexOf(s[i]) === -1) {
str += s[i]
answer.push(-1)
}
else {
for (let strI=str.length-1; strI>=0; strI--){
if (str[strI] === s[i]) {
answer.push(i-strI);
str += s[i]
break;
};
};
};
};
return answer;
}
lastIndexOf 메소드를 활용한 풀이
function solution(s) {
var answer = [];
let str = '';
for (let i=0; i<s.length; i++) {
if (str.indexOf(s[i]) === -1) {
str += s[i]
answer.push(-1)
}
else {
answer.push(i - str.lastIndexOf(s[i]))
str += s[i]
};
};
return answer;
}
해시를 이용한 풀이
function solution(s) {
const hash={};
return [...s].map((v,i)=>{
let result = hash[v] !== undefined ? i - hash[v] : -1;
hash[v] = i;
return result;
});
}
const solution = (s) =>
[...s].map((char, i) => {
const count = s.slice(0, i).lastIndexOf(char);
return count < 0 ? count : i - count;
});