Coding Test/LeetCode
[Javascript] (LeetCode) 242. Valid Anagram (Easy)
Chaedie
2022. 7. 28. 09:27
728x90
[Javascript] (LeetCode) 242. Valid Anagram (Easy)
💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.
내 풀이
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
const mapS = new Map();
const mapT = new Map();
for (let i = 0; i < s.length; i++) {
mapS.set(s[i], (mapS.get(s[i]) || 0) + 1);
}
for (let i = 0; i < t.length; i++) {
mapT.set(t[i], (mapT.get(t[i]) || 0) + 1);
}
if (mapS.size !== mapT.size) {
return false;
}
for (let [k, v] of mapS) {
if (mapS.get(k) !== mapT.get(k)) {
return false;
}
}
return true;
};
- 각 문자를 map에 담으며 숫자를 카운트한다.
- 두 map이 같은지 확인한다.
다른 사람 풀이 참고한 풀이
function isAnagram(s, t) {
const map = {};
s.split('').map(c => map[c] = map[c] ? map[c] + 1 : 1);
t.split('').map(c => map[c] = map[c] ? map[c] - 1 : -1);
return Object.keys(map).every(k => map[k] === 0);
}
- object를 사용하면 성능상 안좋은 점이 많지만, map과 object의 기능이 같다는 것만 생각하면, 굉장히 좋은 아이디어 인것 같다.
배운 점, 느낀 점
- 내 풀이의 경우 “2개의 HASH MAP 을 만들어서 둘이 같은지? 비교한다”는 아이디어였다.
- 하지만 이 아이디어 처럼 해당 원소의 출현갯수를 +- 함으로 간단하게 해결할 수 있다는걸 알게되었다. (스택을 사용한 문제와 유사한 아이디어)
22년 9월 17일 추가
- Anagram을 사용한 Medium문제를 풀다가 Anagram을 이런식으로 카운트해서 푸는게 어려운 문제를 풀때는 안좋다는 걸 알게되었습니다.
- 그래서 49. AnagramGroup에서 푼 방식도 공유합니다.
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
return s.split('').sort().join('') === t.split('').sort().join('')
};
- s를 sort()한다.
- t를 sort()한다.
- 비교한다.