그룹 애너그램. (DSA 시리즈 2)

문제



문자열 strs의 배열이 주어지면 애너그램을 함께 그룹화합니다. 어떤 순서로든 답변을 반환할 수 있습니다.

애너그램은 일반적으로 모든 원래 문자를 정확히 한 번만 사용하여 다른 단어나 구의 문자를 재배열하여 형성된 단어 또는 구입니다.
  • 입력: strs = ["eat","tea","tan","ate","nat","bat"]
  • 출력: [["bat"],["nat","tan"],["ate","eat","tea"]]

  • 입력: strs = [""]
  • 출력: [[""]]

  • 입력: strs = ["a"]
  • 출력: [["a"]]
    */

  • 해결책




    
    /**
     * for each item in array, sort alphabetically, then add sorted item to map as key, push index to value array eg; {aet:[0,1,3], ...}
     * return values of every word(key) in the map as an array.
     * Time Complexity is O(n)... I think. _Not sure if the sorting of each word takes an additional O(n)_ 
     */
    function groupAnagram(arr){
        const map = {}
        for(let i = 0; i < arr.length; i++) {
           const sortedWord = [...arr[i] ].sort((a,b)=> a.localeCompare(b)).join();
           map[sortedWord] = map[sortedWord] !== undefined ? [...map[sortedWord], arr[i]] : [arr[i]]
        }
    
        return Object.values(map);
    }
    


    어쨌든 이 문제를 더 잘 해결할 수 있는 방법이 있다면 댓글에 솔루션을 추가할 수 있습니다. 나는 전문가가 아니다. 그냥 소리내어 배우기.

    좋아요, 공유 및 댓글 남기는 것을 잊지 마세요. :)

    좋은 웹페이지 즐겨찾기