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

Переворот строки по словам

1.6 Junior🔥 111 комментариев
#Kotlin основы#Тестирование

Условие

Реализовать функцию для переворота строки по словам.

Сигнатура:

fun reverseWords(input: String): String

Примеры:

reverseWords("мама мыла раму")
// → "раму мыла мама"

reverseWords("Hello World")
// → "World Hello"

reverseWords("  one   two  three  ")
// → "three two one"

Требования:

  1. Сохранять регистр букв
  2. Лишние пробелы в результате не нужны
  3. Обработать пустую строку
  4. Обработать строку из одного слова

Ограничения:

  • Желательно решить за 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 из-за простоты и читаемости.

Переворот строки по словам | PrepBro