Групповая анаграмма. (Серия 2 DSA)


Проблема

Учитывая массив строк 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);
}
Войдите в полноэкранный режим Выйти из полноэкранного режима

В любом случае, если у вас есть лучший способ решения этой проблемы, вы можете оставить свое решение в комментариях. Я не эксперт. Просто учусь вслух.

Не забудьте поставить лайк, поделиться и оставить комментарий. 🙂

Оцените статью
Procodings.ru
Добавить комментарий