[Easy] 242. Valid Anagram

문제

Given two strings s and t, return true if t is an anagram of s, and false otherwise.

An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

 

s와 t 문자열이 주어지면, t가 s의 아나그램일 때 true를 반환하고 아니면 false를 반환한다.

아나그램이란, 단어를 구성하는 알파벳들이 다른 순서로 구성되어있는 또 다른 단어를 말한다.

 

예시

Example 1:

Input: s = "anagram", t = "nagaram"
Output: true

Example 2:

Input: s = "rat", t = "car"
Output: false

 

제약 조건

Constraints:

  • 1 <= s.length, t.length <= 5 * 104
  • s and t consist of lowercase English letters.

Follow up: What if the inputs contain Unicode characters? How would you adapt your solution to such a case?

 

해결 과정

예전에 풀었던 코드가 바로 1차 코드이다.

s 문자열을 구성하는 문자에 하나하나 접근하여 t가 갖고 있는지 확인하는 방법이다.

문제는 해결할 수 있지만, 시간 복잡도가 좋지 않았다.

 

2차적으로 map을 활용하여 문제를 다르게 풀어보았다.

s 문자열을 순회하며 map의 key 값으로 알파벳을 저장하고, value 값으로 알파벳의 수를 저장한다. 

t 문자열을 순회하며 map에서 저장했던 value 값을 하나씩 감소시킨다. 이때 map의 key값이 없는 경우에는 false를 반환한다.

모든 순회를 끝났을 때 true를 반환한다.

 

해결 코드

1차

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {    
    if(!s.length || !t.length) return true;
    if(s.length !== t.length) return false;
    
    let res = true;
    let arr = [];
  
    for(let i = 0; i < s.length ; i++){
    	let e = s.charAt(i);
      	arr.push(e);
    }
  
    for(let i = 0; i < s.length ; i++){
    	let e = t.charAt(i);
      if(!arr.includes(e)){
        return false;
      }else{          
          arr.splice(arr.indexOf(e), 1);
      }
    }
  
    return res;
};

2차

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isAnagram = function(s, t) {    
    if (s.length !== t.length) return false;
    const map = {};
    
    for (let i = 0; i < s.length; i++) {
        map[s[i]] ? map[s[i]]++ : map[s[i]] = 1;
    }
    
    for (let i = 0; i < t.length; i++) {
        if (map[t[i]]) map[t[i]]--;
        else return false;    
    }

    return true;
};

'leetCode > NeetCode' 카테고리의 다른 글

[Easy] 217. Contains Duplicate  (0) 2022.08.02