function solution(s) {
// lastOfIndex 사용 lastIndexOf("찾을 문자열", "끝낼 위치")
// [현재 문자의 위치] - [가장 가까이 있는 같은 문자의 위치]
// // 첫글자는 무조건 -1
const result = [-1];
for(let i = 1; i<s.length; i++){
// i 보다 앞에서 가장 가까운 같은 문자의 위치 탐색
const position = s.lastIndexOf(s[i],i-1)
if(position === -1){
// 같은 문자가 없었을 땐 -1 그대로 추가
result.push(position)
} else {
// 있으면 현재 문자 위치 - 가장 가까이 있는 같은 문자의 위치
result.push(i-position)
}
}
return result;
}
아직은 for 반복문이 쓰기 편해서 저걸로 먼저 작성하고 다른 메서드로 표현하는 방법을 찾았다.
function solution(s) {
return [...s].map((ele, idx)=>{
if(idx === 0) return -1;
const position = s.lastIndexOf(ele,idx-1)
if(position === -1){
return(position)
} else {
return idx-position
}
})
}
const solution = (s) =>
[...s].map((char, i) => {
const count = s.slice(0, i).lastIndexOf(char);
return count < 0 ? count : i - count;
});
두번째 풀이와 비슷하지만 중간 과정을 삼항연산자를 사용하여 더 간단하게 표현.