Реализуй метод reverse(String s), возвращающий строку в обратном порядке.
- Как развернуть строку в Java?
- Напишите метод разворота строки без StringBuilder
Проще всего — new StringBuilder(s).reverse().toString(); вручную — обмен символов массива с двух концов.
- Обработайте null и пустую строку
- Вручную: два указателя, O(n) по времени
А ещё StringBuilder.reverse корректно обрабатывает суррогатные пары (эмодзи), ручной обмен char — нет
Подробно
На собеседовании обычно ждут два варианта: идиоматичный через стандартную библиотеку и ручной — чтобы проверить работу с массивами и индексами.
Через 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.
Что спросят дальше
- Как развернуть с учётом графем?
- Какая сложность у решения?
Разбор темы
- Строки: неизменяемость, пул и StringBuilder
Почему String immutable, String pool и intern, конкатенация и StringBuilder, char/code points и compact strings.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.