본문 바로가기
Coding Test/LeetCode

[Javascript] (LeetCode) 242. Valid Anagram (Easy)

by Chaedie 2022. 7. 28.
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()한다.
  • 비교한다.

댓글