Реальный ответ: вы не можете повернуть его на месте, но вы можете создать новую строку, которая является обратной.
Так же, как упражнение для игры с рекурсией: иногда, когда вы идете на собеседование, интервьюер может спросить вас, как сделать это с помощью рекурсии, и я думаю, что «предпочтительным ответом» может быть «Я бы предпочел не делать этого в рекурсия, поскольку это может легко вызвать переполнение стека "(потому что это O(n)
, а не O(log n)
. Если это O(log n)
, переполнение стека довольно трудно - стек может обрабатывать 4 миллиарда элементов уровень 32, так как 2 ** 32 - 4294967296. Но если это O(n)
, то он может легко получить переполнение стека.
Иногда интервьюер все равно спрашивает вас: «Как упражнение, почему бы вам не написать его с помощью рекурсии?» И вот оно:
String.prototype.reverse = function() {
if (this.length <= 1) return this;
else return this.slice(1).reverse() + this.slice(0,1);
}
тестовый прогон:
var s = "";
for(var i = 0; i < 1000; i++) {
s += ("apple" + i);
}
console.log(s.reverse());
выход:
999elppa899elppa...2elppa1elppa0elppa
Чтобы попытаться получить переполнение стека, я изменил 1000
на 10000
в Google Chrome, и он сообщил:
RangeError: Maximum call stack size exceeded