anagrams

problem

두 문자열이 주어졌을 때, 두 문자열이 서로 애너그램인지 판별하는 함수를 작성하기

solution

function anagrams(stringA, stringB) {
    const aCharMap = buildCharMap(stringA)
    const bCharMap = buildCharMap(stringB)

    if (Object.keys(aCharMap).length !== Object.keys(bCharMap).length) {
        return false
    }

    for (let char in aCharMap) {
        if (aCharMap[char] !== bCharMap[char]) {
            return false;
        }
    }

    return true;
}

function buildCharMap(str) {
    const charMap = {};

    for (let char of str.replace(/[^\w]/g, '').toLowerCase()) {
        charMap[char] = charMap[char] + 1 || 1
    }
}
function cleanString(str) {
    return str.replace(/[^\w]/g, '').toLowerCase().split('').sort().join('');
}

function anagrams(stringA, stringB) {
    return cleanString(stringA) === cleanString(stringB)
}

Description

  • 문자열을 객체 key로 사용하여 문자열의 각 문자의 개수를 저장한 후 비교하는 방법

  • str.replace(/[^\w]/g, '').toLowerCase().split('').sort().join('')

  • 정규식을 사용하여 문자열에서 알파벳만 남기고 소문자로 변환한 후 정렬하여 비교

Last updated