← Назад к вопросам
Переворот строки по словам
1.6 Junior🔥 111 комментариев
#Kotlin основы#Тестирование
Условие
Реализовать функцию для переворота строки по словам.
Сигнатура:
fun reverseWords(input: String): String
Примеры:
reverseWords("мама мыла раму")
// → "раму мыла мама"
reverseWords("Hello World")
// → "World Hello"
reverseWords(" one two three ")
// → "three two one"
Требования:
- Сохранять регистр букв
- Лишние пробелы в результате не нужны
- Обработать пустую строку
- Обработать строку из одного слова
Ограничения:
- Желательно решить за O(n) по времени
- Можно использовать O(n) дополнительной памяти
Бонус:
- Решить in-place для CharArray
- Написать unit тесты
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение: Переворот строки по словам на Kotlin
Основное решение
fun reverseWords(input: String): String {
if (input.isBlank()) {
return ""
}
val words = input.trim().split("\\s+".toRegex())
return words.asReversed().joinToString(" ")
}
Анализ: O(n) по времени и O(n) по памяти. Разделяем на слова, переворачиваем список, объединяем обратно.
In-place решение для CharArray
fun reverseWordsInPlace(chars: CharArray): Int {
reverse(chars, 0, chars.size)
var start = 0
for (i in chars.indices) {
if (i == chars.size - 1 || chars[i + 1] == ' ') {
reverse(chars, start, i + 1)
start = i + 2
}
}
return chars.size
}
Сначала переворачиваем всю строку, затем каждое слово. O(n) время, O(1) память.
Unit тесты
- testNormalString(): мама мыла раму → раму мыла мама
- testWithExtraSpaces(): пробелы удаляются корректно
- testSingleWord(): одно слово остаётся неизменным
- testEmptyString(): пустая строка → пустая строка
- testBlankString(): только пробелы → пустая строка
- testInPlaceReversal(): CharArray переворачивается корректно
Сложность
Split + reverse: O(n) время, O(n) память, простой подход для Android In-place: O(n) время, O(1) память, требует CharArray
Для мобильных приложений рекомендуется split + reverse из-за простоты и читаемости.