← Назад к вопросам

Разворот строки без встроенных функций

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, поэтому нужен промежуточный массив.

Примеры и тест-кейсы

  1. Обычная строка: "Hello World" → "dlroW olleH"
  2. Однобуквенная строка: "a" → "a"
  3. Пустая строка: "" → ""
  4. Цифры: "12345" → "54321"
  5. Специальные символы: "a@b#c" → "c#b@a"

Edge cases и типичные ошибки

  1. Null-значение: Необходимо проверить null перед работой со строкой, чтобы избежать NullPointerException.
  2. Нечетная длина: Средний символ остается на месте — наш алгоритм это учитывает (left < right прекращает цикл до середины).
  3. Использование StringBuilder: Хотя было запрещено, это наиболее простое решение. Мы выбрали явное манипулирование массивом.
  4. Обмен символов: Забывание временной переменной приведет к потере данных.

Решение использует классический двухуказательный подход, очень эффективно и просто для понимания.

Разворот строки без встроенных функций | PrepBro