N

(Leet Code JS)Find And Replace in String 본문

Leet Code 알고리즘

(Leet Code JS)Find And Replace in String

naeunchan 2022. 2. 8. 11:12
728x90
반응형

https://leetcode.com/problems/find-and-replace-in-string/

 

Find And Replace in String - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

문자열과 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
반응형