Подобные задачи чаще всего попадаются на собеседованиях — на первый взгляд задача кажется очень простой, особенно если воспользоваться встроенными функциями языка - trim, split и так далее - задача решается в несколько строчек кода.
Но, обычно, в таких задачах интервьеры просят НЕ использовать эти функции и реализовать все самим. И в этот момент частенько «зависаешь» на реализации.
Сложность: 🟡 Средняя
ℹ️ Описание
Необходимо написать функцию, которая будет переставлять слова в строке в обратном направлении. Слова в строке разделены пробелами, пробелов между слов может быть несколько, а также пробелы могут стоять в начале и конце исходной строки.
В итоговой строке слова должны быть разделены одним пробелом, а также не должно быть пробелов в начале и конце строки.
⚠️ Ограничения
— Длина строки может быть в диапазоне от 1 до 10000
— Строка содержит только буквы латинского алфавита, числа и пробелы.
— В каждой строке есть как минимум одно слово
1️⃣ Пример
Входящие данные
«the sky is blue»
Ответ
«blue is sky the»
2️⃣ Пример
Входящие данные
« hello world »
Ответ
«world hello»
3️⃣ Пример
Входящие данные
«a good example»
Ответ
«example good a»
✅ Решение
Данную задачу можно решить легким трюком: ответ мы получим, если избавимся от лишних пробелов, после перевернем каждое слово в строке и в конце перевернем полностью всю строку. Давайте рассмотрим задачу на примере
«a good example».
1. Удаляем лишние пробелы внутри строки и получаем строку
«a good example»
2. Далее переворачиваем каждое слово внутри строки и получаем строку
«a doog elpmaxe»
3. Последним шагом переворачиваем всю строку и получаем требуемый результат
«example good a»
Посмотреть реализацию в блоге
🅾️ Оценка сложности
По времени
O(n) — так как мы несколько раз итерируемся по всей строке.
По памяти
O(n) — так как мы выделяем память для работы с новой строкой.
#strings #medium