[JS] 가장 가까운 같은 글자
function solution(s) {
var answer = [];
let checkStr = [];
for (let i = 0; i <s.length; i++) {
if (!checkStr.includes(s[i])) {
answer.push(-1);
checkStr.push(s[i]);
} else {
answer.push(checkStr.length - checkStr.lastIndexOf(s[i]));
checkStr.push(s[i]);
}
}
return answer;
}
`lastIndexOf()`
문자열에서 특정 문자가
마지막으로 나타난 위치를 찾을 때 사용하는 메서드
`includes()`
array.includes(element, start)
배열이나 문자열에 특정 요소나 문자가 포함되어 있는지 확인하는 메서드
Bloolean 값 반환
포함되어 있으면 `true` 그렇지 않으면 `false`
`element` : 배열에서 찾고자 하는 요소
`start` (선택 사항) : 검색을 시작할 인덱스 기본값은 `0`
변수 초기화
`answer` : 결과를 저장할 빈 배열
`checkStr` : 문자의 존재 여부와 위치 추적할 배열
문자열 순회
문자 검삼
`if (!checkStr.includes(s[i])) {...} else {...}`
현재 문자가 `checkStr`에 포함되어 있는지 확인
- 포함되어 있지 않을 경우
`answer`배열에 `-1`추가
`checkStr` 배열에 현재 문자 추가
- 포함되어 있을 경우
`checkStr`에서 현재 문자가 마지막으로 등장한 위치와
현재까지의 길이의 차이를 계산하여 `answer`배열에 추가
`checkStr`배열에 현재 문자를 추가
결과 반환
다른 사람 풀이
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;
});
`.map()`
array.map(callback(currentValue, index, array), thisArg)
배열의 각 요소에 대해 제공된 함수를 호출하고, 그 결과를 새로운 배열로 반환하는 메서드
`callback`: 각 요소에 대해 실행할 함수. 이 함수는 세 가지 인수를 가짐
- `currentValue`: 현재 처리되고 있는 요소
- `index` (선택 사항): 현재 처리되고 있는 요소의 인덱스
- `array` (선택 사항): `map()`을 호출한 배열
`thisArg` (선택 사항): `callback` 함수 내부에서 `this`로 사용할 값
여기서는 문자열을 배열로 변환하여 map을 사용
`.slice()`
배열 또는 문자열의 일부를 추출하여 새로운 배열 또는 문자열을 반환하는 메서드
여기서는 주어진 인덱스까지의 부분 문자열을 추출