Необходимо написать функцию strJoin, которая соединит строки через разделитель: strJoin(delimiter, ...strings).
Решение
Оптимальное решение
// Временная сложность: O(n) — где n суммарное кол-во символов// Пространственная сложность: O(n) — для хранения результатаfunction strJoin(delimiter, ...strings) { return strings.join(delimiter);}
Альтернативное решение (for + конкатенация)
// Временная сложность: O(n) — где n суммарное кол-во символов// Пространственная сложность: O(n) — для хранения результатаfunction strJoin(delimiter, ...strings) { if (strings.length === 0) return ''; let result = strings[0]; for (let i = 1; i < strings.length; i++) { result += delimiter + strings[i]; } return result;}
Альтернативное решение (reduce)
// Работает чуть медленнее цикла из-за вызова callback-функции на каждой итерации.// Временная сложность: O(n) — где n суммарное кол-во символов// Пространственная сложность: O(n) — для хранения результатаfunction strJoin(delimiter, ...strings) { if (strings.length === 0) return ''; // Если не передать initialValue, reduce возьмет первый элемент как аккумулятор // и начнет перебор со второго, что идеально решает проблему лишнего разделителя return strings.reduce((acc, curr) => acc + delimiter + curr);}
Альтернативное решение (arguments + slice)
// Временная сложность: O(n) + O(a)// (где n - кол-во символов, a - кол-во аргументов для копирования массива)// Пространственная сложность: O(n) + O(a)// (создаем промежуточный массив strings, что дает лишнюю аллокацию)function strJoin() { var delimiter = arguments[0]; // Превращаем arguments (начиная с 1-го индекса) в настоящий массив var strings = Array.prototype.slice.call(arguments, 1); return strings.join(delimiter);}