유효한 아나그램. (자바스크립트 DSA 시리즈)

문제



두 문자열 s와 t가 주어지면 t가 s의 애너그램이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

애너그램은 일반적으로 모든 원래 문자를 정확히 한 번만 사용하여 다른 단어나 구의 문자를 재배열하여 형성된 단어 또는 구입니다.
  • 입력: s = "anagram", t = "nagaram"
  • 출력: 참
  • 입력: s = "쥐", t = "자동차"
  • 출력: 거짓

  • 제약 조건
  • 1 <= s.길이, t.길이 <= 5 * 104
  • s와 t는 영문 소문자로 구성됩니다.

  • 해결책



    이 문제를 해결하는 방법에는 두 가지가 있습니다.

    방법 1




    /**
     * Since t is compared to s,
     * convert all to lowercase,
     * sort t and s, 
     * if t is exactly equal to s, then it is an anagram, else it isn't
     * Runtime O(n)
     */
    
    // const s = "anagram";
    // const t = "nagaram" 
    const s = "rat", t = "car"
    function anagram(s, t){
        const sortedS = s.split('').sort().join('');
        const sortedT = t.split('').sort().join('');
        if (sortedS === sortedT) return true;
        return false;
    }
    


    방법 2



    지도 사용

    /**
     * Create a map object
     * For each char in S, add the first occurrence with a value of 1. For subsequent occurrence, increase the value by +1.
     * For each char in T, if it doesn't exist in map i.e undefined or value is <= 0, return false. If it does exist, do value -1, return true outside loop.
     * @param {*} s 
     * @param {*} t 
     */
    
    function anagramTwo(s,t){
        // for our answer to be an anagram, the word must be rearranged, hence, if the length of the two words are not same, it is not an anagram.
        if(s.length !== t.length) return false;
    
        const map = {};
        for (let i of s) {
            if(map[i] !== undefined) {
                map[i]++
             } else map[i] = 1
        }
    
        for (let i of t){
            if (map[i] === undefined || map[i] <= 0) return false;
            map[i]--;
        }
        return true
    
    }
    
    console.log(anagramTwo("ab", "a"))
    


    도움이 되셨다면 좋아요, 공유 및 북마크를 눌러주세요. :)

    좋은 웹페이지 즐겨찾기