문제
Given two strings, write a function to determine if the second string is an anagram of the first. An anagram is a word, phrase, or name formed by rearranging the letters of another, such as cinema, formed from iceman. (no spaces, all lowercase words)
validAnagram('','') //true
validAnagram('aaz','zza') //false
validAnagram('anagram','nagaram') //true
validAnagram('awesome','awesom') //false
정답 풀이
function validAnagram(first, second) {
if (first.length !== second.length) {
return false;
}
const lookup = {};
for (let i = 0; i < first.length; i++) {
let letter = first[i];
// if letter exists, increment, otherwise set to 1
lookup[letter] ? lookup[letter] += 1 : lookup[letter] = 1;
}
for (let i = 0; i < second.length; i++) {
let letter = second[i];
// can't find letter or letter is zero then it's not an anagram
if (!lookup[letter]) {
return false;
} else {
lookup[letter] -= 1;
}
}
return true;
}
내 풀이 - 오답
- 저러면 키값이 같은 애들은 계속 1로 덮어씌어진다. 값이 더해지는 게 아니라.
function validAnagram(string1, string2){
if(string1.length !== string2.length){return false}
let object1 = {}
let object2 = {}
for(let i = 0;i<string1.length; i++){
object1 = {...object1,string1[i]:1}
}
for(let i = 0;i<string2.length; i++){
object2 = {...object2,string2[i]:1}
}
return object1 === object2 ? true : false
}
function validAnagram(string1, string2){ if(string1.length !== string2.length){return false} let object1, object2 = {} for(let i = 0 ; i < string1.length; i++){ let letter1 = string1[i] object1[letter1] ? object1[letter1] += 1 : object1[letter1] = 1; } for(let i = 0 ; i < string2.length; i++){ let letter2 = string2[i] object2[letter2] ? object2[letter2] += 1 : object2[letter2] = 1; } object1 === object2 ? true : false; }
아하 객체나 배열은 생긴 게 똑같아도 같은 게 아니라고 했다. 참조값이 서로 다르다고.
[1,2,3] !== [1,2,3] //true
'Coding Test' 카테고리의 다른 글
[ 빈도수 세기 패턴 / 정답 ] sameFrequency (0) | 2023.10.29 |
---|