Problem
Given an array of strings strs, group the anagrams together. You can return the answer in any order.
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.
- Example
- Input: strs = ["eat","tea","tan","ate","nat","bat"]
- Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
- Input: strs = [""]
- Output: [[""]]
- Input: strs = ["a"]
- Output: [["a"]] */
Solution
/** * 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); }
Anyway, if you have a better way of solving this, you can drop your solution in the comments. I'm no expert. Just learning aloud.
Don't forget to like, share and drop a comment. :)
Top comments (0)