문제
변수 문자열이 주어질때 각 알파벳을 비교하여 중복되지 않으면 -1을 중복시에는 몇칸 앞에 있는지 수를 배열로 리턴
나의 풀이
function solution(s) {
var answer = [];
var lastIndex = {};
for(let i = 0; i < s.length; i++) {
if (s[i] in lastIndex) {
answer.push(i - lastIndex[s[i]]);
// console.log(lastIndex)
} else {
answer.push(-1);
}
lastIndex[s[i]] = i;
// console.log(lastIndex)
}
return answer;
}
- answer : 최종 결과를 저장하는 배열
- lastIndex : 문자열에서 각 문자의 마지막 인덱스를 추적하는 객체
- for
- 문자열 s의 각 문자를 반복
- 현재문자 s[i]가 lastIndex 객체에 존재하는지 확인후 있다면 현재 인덱스 i와 lastIndes[s[i]]에 저장된 마지막 인덱스간의 차이를 계산하고 answer 배열에 추가
- 문자가 이전에 나타나지 않았다면 answer 배열에 -1 추가
- 각 문자를 처리후에 현재 인덱스로 lastIndex 객체 업데이트
다른 풀이
function solution(s) {
const hash={};
return [...s].map((v,i)=>{
let result = hash[v] !== undefined ? i - hash[v] : -1;
hash[v] = i;
return result;
});
}
- 객체와 배열을 사용
- 각 문자에 대해 map 함수를 이용하여 현재 문자 v와 인덱스 i를 받아온다
- 현재 문자 v가 이전에 나타난 적이 있는지 확인후 있으면 i 와 hash[v]에 저장된 이전 인덱스 간의 차이 계산
- hash[v]를 현재 인덱스로 업데이트 한다
const solution = (s) =>
[...s].map((char, i) => {
const count = s.slice(0, i).lastIndexOf(char);
return count < 0 ? count : i - count;
});
- 현재 인덱스 i 이전의 부분문자열을 생성해 char의 마지막 인덱스를 찾아 계산
'기초다지기 > JS 코딩테스트' 카테고리의 다른 글
javaScript 매개변수 배열 중복에 따른 계산식 (1) | 2023.11.20 |
---|---|
javaScript 다항식 더하기 (0) | 2023.11.17 |
javaScript 숫자단어 문자열을 숫자로 변경하기 (0) | 2023.11.15 |
javaScript n과 m으로만 이루어진 정수 배열 구하기 (1) | 2023.11.14 |
javaScript 문자열 2개씩 제거하기 (0) | 2023.11.13 |