← Назад к вопросам
Разворот строки без встроенных функций
1.0 Junior🔥 101 комментариев
#Коллекции#ООП#Основы Java
Условие
Напишите программу на Java для переворачивания строки, изменив расположение символов в строке задом наперёд без использования встроенных в String функций (таких как reverse(), StringBuilder.reverse() и т.д.).
Пример
Входные данные: "Hello World"
Выходные данные: "dlroW olleH"
Требования
- Нельзя использовать StringBuilder.reverse()
- Нельзя использовать StringBuffer.reverse()
- Нельзя использовать Collections.reverse()
- Решение должно быть эффективным по памяти
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Подход
Будем проходить по строке с обоих концов навстречу друг другу, обменивая символы местами. Используем массив char для прямого манипулирования символами и двойной указатель.
Решение
public class StringReversal {
/**
* Разворачивает строку без использования встроенных методов.
* Использует двухуказательный подход.
*
* @param str строка для разворачивания
* @return перевернутая строка
*/
public static String reverseString(String str) {
if (str == null || str.length() <= 1) {
return str;
}
// Преобразуем строку в массив символов для прямой работы
char[] chars = str.toCharArray();
// Двойной указатель: начало и конец
int left = 0;
int right = chars.length - 1;
// Обменяем символы, двигаясь к центру
while (left < right) {
// Обмен местами
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
// Создаем новую строку из перевернутого массива
return new String(chars);
}
public static void main(String[] args) {
// Примеры использования
System.out.println(reverseString("Hello World")); // dlroW olleH
System.out.println(reverseString("Java")); // avaJ
System.out.println(reverseString("a")); // a
System.out.println(reverseString("")); // (пустая строка)
System.out.println(reverseString("12345")); // 54321
}
}
Сложность
- Временная сложность: O(n), где n — длина строки. Мы проходим по каждому символу ровно один раз (от начала и конца навстречу).
- Пространственная сложность: O(n) для хранения массива char. В Java String immutable, поэтому нужен промежуточный массив.
Примеры и тест-кейсы
- Обычная строка: "Hello World" → "dlroW olleH"
- Однобуквенная строка: "a" → "a"
- Пустая строка: "" → ""
- Цифры: "12345" → "54321"
- Специальные символы: "a@b#c" → "c#b@a"
Edge cases и типичные ошибки
- Null-значение: Необходимо проверить null перед работой со строкой, чтобы избежать NullPointerException.
- Нечетная длина: Средний символ остается на месте — наш алгоритм это учитывает (left < right прекращает цикл до середины).
- Использование StringBuilder: Хотя было запрещено, это наиболее простое решение. Мы выбрали явное манипулирование массивом.
- Обмен символов: Забывание временной переменной приведет к потере данных.
Решение использует классический двухуказательный подход, очень эффективно и просто для понимания.