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).