Прежде всего вы должны понять, что str + = изменит размер вашей строковой памяти, чтобы освободить место для 1 дополнительного символа. Это хорошо, но если у вас есть, скажем, книга с 1000 страницами, которую вы хотите перевернуть, это займет очень много времени.
Решение, которое некоторые люди могут предложить, - это использовать StringBuilder. Что делает строитель строк, когда вы выполняете + =, так это то, что он выделяет гораздо большие куски памяти для хранения нового символа, так что ему не нужно перераспределять каждый раз, когда вы добавляете символ.
Если вы действительно хотите быстрое и минимальное решение, я бы предложил следующее:
char[] chars = new char[str.Length];
for (int i = str.Length - 1, j = 0; i >= 0; --i, ++j)
{
chars[j] = str[i];
}
str = new String(chars);
В этом решении есть одно начальное выделение памяти, когда инициализируется char [], и одно выделение, когда строковый конструктор строит строку из массива char.
В моей системе я провел для вас тест, который переворачивает строку из 2 750 000 символов. Вот результаты за 10 казней:
StringBuilder: 190K - 200K тиков
Char Char Array: 130K - 160K тиков
Я также запустил тест для нормальной строки + =, но я отказался от него через 10 минут без вывода.
Однако я также заметил, что для небольших строк StringBuilder работает быстрее, поэтому вам придется выбирать реализацию на основе входных данных.
Приветствия