문제
빈도수 세기- validAnagram
두 개의 문자열이 주어졌을 때, 두 번째 문자열이 첫 번째 문자열의 애너그램인지 확인하는 함수를 작성합니다. 애너그램은 다른 글자의 글자를 재배열하여 형성된 단어, 구 또는 이름입니다. (예시: cinema -> iceman)
예시:
validAnagram('', '') // true
validAnagram('aaz', 'zza') // false
validAnagram('anagram', 'nagaram') // true
validAnagram("rat","car") // false) // false
validAnagram('awesome', 'awesom') // false
validAnagram('amanaplanacanalpanama', 'acanalmanplanpamana') // false
validAnagram('qwerty', 'qeywrt') // true
validAnagram('texttwisttime', 'timetwisttext') // true
안내: 문자열에 소문자만 포함되어 있다고 가정해도 됩니다.
Time Complexity - O(n)
분석
Q) 두 단어의 구성 요소가 동일한가?
input) string, string
output) boolean
답안
function validAnagram(word1, word2){
// 길이가 다르면 false 리턴한다.
if (word1.length != word2.length) {
return false
}
// 객체를 만들어 word1의 구성요소를 카운트한다.
const word1Map = countMap(word1)
// 객체를 만들어 word2의 구성요소를 카운트한다.
const word2Map = countMap(word2)
// word1의 객체를 순회하면서, word2의 객체와 대응되는 값을 비교한다.
for (let [letter, count] of Object.entries(word1Map)){
// 일치하지 않으면 false 리턴.
if (word2Map[letter] != count) {
return false
}
}
// true 리턴.
return true
}
function countMap(word){
const wordMap = {}
for (let letter of word){
wordMap[letter] = ++wordMap[letter] || 1
}
return wordMap
}