250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(Leet Code JS)Find And Replace in String 본문
728x90
반응형
https://leetcode.com/problems/find-and-replace-in-string/
문자열과 hash map을 활용.
indices 배열이 오름차순으로 정렬되어있지 않다.
그래서 인덱스에 따른 source와 target을 map에 저장 후 문자열을 변환하면 된다.
map에 저장 후 indices를 오름차순으로 정렬 후, s 문자열을 순회
만약 indiceMap에 i 인덱스가 있다면 문자열 비교를 진행한다.
map에서 꺼낸 value는 배열 형태로 되어 있으며, 구조 분할로 각각 [source, target]으로 저장한다.
source의 길이를 나타내는 sLen으로,
origin은 i에서 sLen의 길이만큼 잘라 문자열을 저장한다.
이후 origin과 source를 비교하여 같다면 answer 배열에 target을 저장.
다르다면 origin을 answer에 push한다.
또한 i 도 sLen - 1만큼 더해준다.
1을 빼주는 이유는 for문에서 i++을 진행하기 때문이다.
만약 indices에 i 인덱스가 없다면 s[i]를 그대로 answer에 넣어주면 된다.
마지막은 answer.join("")하여 문자열 형태로 리턴한다.
const findReplaceString = (s, indices, sources, targets) => {
const answer = [];
const indiceMap = new Map();
for(let i = 0; i < indices.length; i++){
indiceMap.set(indices[i], [sources[i], targets[i]]);
}
indices.sort((a, b) => a - b);
for(let i = 0; i < s.length; i++){
if(indiceMap.has(i)){
const [source, target] = indiceMap.get(i);
const sLen = source.length;
const origin = s.slice(i, i + sLen);
if(origin === source){
answer.push(target);
} else{
answer.push(origin);
}
i += sLen - 1;
} else{
answer.push(s[i]);
}
}
return answer.join("");
};
728x90
반응형
'Leet Code 알고리즘' 카테고리의 다른 글
(Leet Code JS)Jump Game II (0) | 2022.02.17 |
---|---|
(Leet Code JS)Min Cost Climbing Stairs (0) | 2022.02.17 |
(Leet Code JS)Rearrange Spaces Between Words (0) | 2022.02.08 |
(Leet Code JS)Path With Minimum Effort (0) | 2022.01.22 |
(Leet Code JS)Minimum Path Sum (0) | 2022.01.20 |