Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 문자열에서 고유 문자만 추출하는 방법 (중복 문자 완전 제거)


문제 정의

문자열 str을 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 입력 문자열 전체를 검사한 뒤, 단 한 번만 등장하는 고유 문자만 원래 순서대로 모아 새로운 문자열을 구성해야 하며, 두 번 이상 나타나는 모든 중복 문자는 결과에서 완전히 제거되어야 합니다.

예제 코드

다음은 위 문제를 해결하는 코드입니다 −

const str = 'hey there i am using javascript';

const removeAllDuplicates = (str = '') => {
    let res = '';
    for (let i = 0; i < str.length; i++) {
        const el = str[i];
        // 처음 등장한 위치와 마지막 등장 위치가 같으면 고유 문자
        if (str.indexOf(el) === str.lastIndexOf(el)) {
            res += el;
        }
    }
    return res;
};

console.log(removeAllDuplicates(str));

코드 동작 원리

  • 결과 버퍼 초기화: 최종 결과를 담을 빈 문자열 res를 준비합니다.
  • 한 글자씩 순회: for 반복문으로 입력 문자열의 모든 문자를 차례대로 확인합니다.
  • 고유 여부 판별: indexOf()는 해당 문자가 처음 발견되는 인덱스를, lastIndexOf()는 마지막으로 발견되는 인덱스를 반환합니다. 두 값이 같다면 그 문자가 문자열에 딱 한 번만 존재한다는 의미이므로, 이 경우에만 결과에 추가합니다.
  • 결과 반환: 순회가 끝나면 고유 문자만 모인 새로운 문자열을 반환합니다.

출력 결과

콘솔에는 다음과 같이 출력됩니다 −

ymungjvcp

보너스: filter()로 더 간결하게 작성하기

동일한 로직을 filter() 메서드를 활용하면 한 줄로 표현할 수 있습니다.

const removeAllDuplicates = (str = '') =>
  [...str].filter(el => str.indexOf(el) === str.lastIndexOf(el)).join('');

두 방식 모두 각 문자마다 문자열을 다시 탐색하므로 시간 복잡도는 O(n²)입니다. 입력 문자열이 매우 길다면 Map 객체로 각 문자의 등장 횟수를 미리 집계하여 O(n) 성능으로 최적화할 수 있습니다.