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()한다.
- 비교한다.
'Coding Test > LeetCode' 카테고리의 다른 글
[Javascript] (LeetCode) 66. Plus One (Easy) (0) | 2022.08.04 |
---|---|
[Javascript] (LeetCode) 28. Implement strStr() (Easy) (0) | 2022.08.03 |
[Javascript] (LeetCode) 8. String to Integer (atoi) (Medium) (0) | 2022.08.02 |
[Javascript] (LeetCode) 125. Valid Palindrome (Easy) (0) | 2022.07.29 |
[Javascript] (LeetCode) 387. First Unique Character in a String (Easy) (0) | 2022.07.26 |
[Javascript] (LeetCode) 7. Reverse Integer (Medium) (0) | 2022.07.25 |
[Javascript] (LeetCode)136. Single Number (Easy) (0) | 2022.07.25 |
[Javascript] (LeetCode) 217. Contains Duplicate (Easy) (0) | 2022.07.24 |
댓글