Задача

Мы будем менять первый и последний элемент, затем второй и второй с конца, и так далее пока не достигнем середины.

{% highlight java %} public String reverse(String str) {

char[] strChars = str.toCharArray();

int startIndex = 0;
int endIndex = strChars.length - 1;

while (startIndex < endIndex) {

    // swap characters
    char temp = strChars[startIndex];
    strChars[startIndex] = strChars[endIndex];
    strChars[endIndex] = temp;

    // move towards middle
    startIndex++;
    endIndex--;
}

return new String(strChars);

} {% endhighlight %}

Сложность O(n) по времени и O(1) по доп. месту.