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

Реверс слов в предложении

2.0 Middle🔥 181 комментариев
#Теория тестирования

Условие

Напишите функцию, которая разворачивает порядок слов в заданном предложении, не используя классы-коллекции.

Пример

Вход: "Hello World Test" Выход: "Test World Hello"

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Описание задачи

Необходимо развернуть порядок слов в строке без использования встроенных коллекций (List, Array, Vector и т.д.). Это требует творческого подхода к манипулированию строками с использованием стека вызовов или встроенных строковых операций.

Подход 1: Манипулирование символами

Реализуем логику вручную, проходя по строке и выделяя слова:

def reverse_words_manual(s: str) -> str:
    result = ""
    current_word = ""
    
    for i in range(len(s) - 1, -1, -1):
        char = s[i]
        
        if char == " ":
            if current_word:
                result += current_word[::-1] + " "
                current_word = ""
        else:
            current_word += char
    
    if current_word:
        result += current_word[::-1]
    
    return result.strip()

Подход 2: Двойной реверс (для Python)

def reverse_words(s: str) -> str:
    return " ".join(word for word in s.split()[::-1])

Подход 3: На JavaScript

function reverseWords(s) {
    let result = "";
    let currentWord = "";
    
    for (let i = s.length - 1; i >= 0; i--) {
        const char = s[i];
        
        if (char === " ") {
            if (currentWord) {
                result += currentWord + " ";
                currentWord = "";
            }
        } else {
            currentWord = char + currentWord;
        }
    }
    
    if (currentWord) {
        result += currentWord;
    }
    
    return result.trim();
}

Анализ сложности

Временная сложность: O(n), где n - длина строки

Пространственная сложность: O(n) для хранения результата

Примеры использования

assert reverse_words("Hello World Test") == "Test World Hello"
assert reverse_words("  Hello  World  ") == "World Hello"
assert reverse_words("a") == "a"
assert reverse_words("") == ""

Ключевые моменты

  • Обработка множественных пробелов
  • Корректная работа с пробелами в начале и конце
  • Идеальное решение имеет линейную сложность
  • Без использования стандартных контейнеров типа List или Array
Реверс слов в предложении | PrepBro