Задачи
49. Group anagrams ⛔
var groupAnagrams = function (strs) {
  const hash = {};
  const result = [];
 
  for (const iterator of strs) {
    const sorted = iterator.split('').sort().join('');
 
    if (hash[sorted]) {
      hash[sorted].push(iterator);
    } else {
      hash[sorted] = [iterator];
    }
  }
 
  for (const sorted in hash) {
    result.push(hash[sorted]);
  }
 
  return result;
};

Проход по каждой строке iterator из входного массива strs выполняется за время O(n), где n - количество строк в strs. Внутри этого прохода происходит разделение строки на символы с помощью split(''), сортировка символов с помощью .sort(), и объединение отсортированных символов обратно в строку с помощью join(''). Все эти операции выполняются за время O(m * log m), где m - максимальная длина строки.

Добавление строк в хеш-таблицу hash и массив result происходит в худшем случае за время O(1).

После прохода по всем строкам и формирования хеш-таблицы hash, следующий цикл for...in также выполняется за время O(k), где k - количество уникальных ключей в hash.

В итоге, суммарная временная сложность алгоритма можно оценить как O(n * m * log m + k).

Кроме того, используется дополнительная память для хранения хеш-таблицы hash и массива result, которая зависит от количества уникальных ключей в hash и общего размера групп анаграмм.

Если максимальная длина строк является константой (m - постоянное значение), а количество уникальных ключей в hash и количество групп анаграмм также являются константами, то временную сложность можно упростить до O(n).