Проблема
Учитывая массив строк 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);
}
В любом случае, если у вас есть лучший способ решения этой проблемы, вы можете оставить свое решение в комментариях. Я не эксперт. Просто учусь вслух.
Не забудьте поставить лайк, поделиться и оставить комментарий. 🙂