Получить доступ

Реализуй метод reverse(String s), возвращающий строку в обратном порядке.

JuniorОсновы языка
Ещё спрашивают так:
  • Как развернуть строку в Java?
  • Напишите метод разворота строки без StringBuilder
Коротко

Проще всего — new StringBuilder(s).reverse().toString(); вручную — обмен символов массива с двух концов.

  • Обработайте null и пустую строку
  • Вручную: два указателя, O(n) по времени

А ещё StringBuilder.reverse корректно обрабатывает суррогатные пары (эмодзи), ручной обмен char — нет

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

На собеседовании обычно ждут два варианта: идиоматичный через стандартную библиотеку и ручной — чтобы проверить работу с массивами и индексами.

Через StringBuilder. Строки в Java неизменяемы, поэтому изменяемый StringBuilder разворачивает содержимое и возвращает новую строку. Метод reverse() правильно обрабатывает суррогатные пары — символы вне базовой плоскости Unicode (эмодзи), которые занимают два char.

Вручную. Превратить строку в массив символов и менять местами элементы с двух концов, двигая указатели к центру. Сложность O(n) по времени и O(n) по памяти на массив. Такой вариант разобьёт суррогатные пары — стоит сказать об этом вслух.

Не забыть про граничные случаи: null (вернуть null или бросить исключение — уточнить у интервьюера) и пустую строку.

Пример

static String reverse(String s) {
    if (s == null) return null;
    return new StringBuilder(s).reverse().toString();
}

static String reverseManual(String s) {
    if (s == null) return null;
    char[] chars = s.toCharArray();
    for (int i = 0, j = chars.length - 1; i < j; i++, j--) {
        char tmp = chars[i];
        chars[i] = chars[j];
        chars[j] = tmp;
    }
    return new String(chars);
}

Что хотят услышать

  • Рабочий код хотя бы одним способом.
  • Обработка null и пустой строки.
  • Понимание неизменяемости String и роли StringBuilder.
  • Сложность и замечание про суррогатные пары — плюс.

Частые ошибки

  • Падение на null.
  • Конкатенация String в цикле вместо StringBuilder.

Что спросят дальше

  • Как развернуть с учётом графем?
  • Какая сложность у решения?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем