Я не совсем уверен, что вы имеете в виду, когда говорите, что вам нужен эффективный алгоритм.
Способы реверсирования строки, я могу думать, являются (все они уже упоминалось в других ответах):
использовать стек (ваша идея).
Создайте новую обратную строку, добавив символы поочередно в обратном порядке от исходной строки к пустой строке String/StringBuilder/char [].
Обмен всеми символами в первой половине строки со своей соответствующей позицией в последней половине (то есть i-й символ заменяется символом (длиной-i-1) -го символа).
Дело в том, что все они имеют один и тот же выполнения сложности: O (N). Таким образом, на самом деле нельзя утверждать, что любой из них значительно лучше других для очень больших значений N (т.е. очень больших строк).
У третьего метода есть что-то для этого, другие два требуют O (N) дополнительного пространства (для стека или новой строки), в то время как он может выполнять свопы на месте. Но Строки неизменны в Java, поэтому вам нужно выполнить свопы на вновь созданной StringBuilder/char [], и в итоге вам понадобится дополнительное пространство O (N).
Такого рода вопросы были забиты камнями до смерти для C/C++. В частности, искусство компьютерного программирования Д. Кнута подробно описано. – NomeN
«Забитый камнями», хахаха, мне это нравится. – Zaki
Из любопытства: кто-нибудь знает о реальном использовании для этого? Я имею в виду место, где есть необходимость в * эффективном * алгоритме реверсирования строки *? –