«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Хроники машинописного кодирования: перестановка слов в строке

Хроники машинописного кодирования: перестановка слов в строке

Опубликовано 2 августа 2024 г.
Просматривать:734

Typescript Coding Chronicles: Reverse Words in a String

Постановка задачи:

Для входной строки s измените порядок слов на обратный. Слово определяется как последовательность символов, не являющихся пробелами. Слова в s будут разделены хотя бы одним пробелом. Возвращает строку слов в обратном порядке, объединенную одним пробелом.

Обратите внимание, что s может содержать начальные или конечные пробелы или несколько пробелов между двумя словами. Возвращаемая строка должна содержать только один пробел, разделяющий слова. Не включайте лишних пробелов.

Пример 1:

  • Ввод: s = "небо голубое"
  • Вывод: «голубое небо»

Пример 2:

  • Ввод: s = "привет, мир"
  • Вывод: «мировой привет»
  • Объяснение: перевернутая строка не должна содержать пробелов в начале и конце.

Пример 3:

  • Ввод: s = "хороший пример"
  • Вывод: «пример хорошего качества»
  • Объяснение: Вам необходимо сократить несколько пробелов между двумя словами до одного пробела в перевернутой строке.

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

  • 1
  • s содержит английские буквы (прописные и строчные), цифры и пробелы ' '.
  • В s есть хотя бы одно слово.

Первоначальный мыслительный процесс:

Чтобы решить эту проблему, нам необходимо:

  1. Разбить строку на слова.
  2. Измените порядок слов.
  3. Соедините слова вместе, оставив между ними один пробел.

Основное решение:

Код:

function reverseWordsBruteForce(s: string): string {
    // Split the string by spaces and filter out empty strings
    let words = s.trim().split(/\s /);

    // Reverse the array of words
    words.reverse();

    // Join the words with a single space
    return words.join(' ');
}

Анализ временной сложности:

  • Временная сложность: O(n), где n — длина строки. Разделение, реверсирование и объединение занимают линейное время.
  • Пространственная сложность: O(n), где n — длина строки. Мы сохраняем слова в массиве, а конечный результат — в строке.

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

Это решение эффективно с учетом ограничений. Однако для массива слов используется дополнительное пространство.

Оптимизированное решение:

Если строковый тип данных является изменяемым и нам нужно решить его на месте с дополнительным пространством O(1), мы можем использовать метод двух указателей, чтобы перевернуть слова в исходной строке.

Код:

function reverseWordsOptimized(s: string): string {
    // Trim the string and convert it to an array of characters
    let chars = s.trim().split('');

    // Helper function to reverse a portion of the array in place
    function reverse(arr: string[], left: number, right: number) {
        while (left 



Анализ временной сложности:

  • Временная сложность: O(n), где n — длина строки. Каждый символ обрабатывается постоянное количество раз.
  • Пространственная сложность: O(1), поскольку мы изменяем массив на месте и используем только постоянное количество дополнительного пространства.

Улучшения по сравнению с базовым решением:

  • Оптимизированное решение уменьшает сложность пространства за счет выполнения операций над массивом символов на месте.

Краевые случаи и тестирование:

Краевые случаи:

  1. Строка содержит начальные и конечные пробелы.
  2. Строка содержит несколько пробелов между словами.
  3. Строка содержит только одно слово.
  4. Длина строки находится на минимальном или максимальном пределе.

Тестовые случаи:

console.log(reverseWordsBruteForce("the sky is blue")); // "blue is sky the"
console.log(reverseWordsBruteForce("  hello world  ")); // "world hello"
console.log(reverseWordsBruteForce("a good   example")); // "example good a"
console.log(reverseWordsBruteForce("singleWord")); // "singleWord"
console.log(reverseWordsBruteForce("   ")); // ""

console.log(reverseWordsOptimized("the sky is blue")); // "blue is sky the"
console.log(reverseWordsOptimized("  hello world  ")); // "world hello"
console.log(reverseWordsOptimized("a good   example")); // "example good a"
console.log(reverseWordsOptimized("singleWord")); // "singleWord"
console.log(reverseWordsOptimized("   ")); // ""

Общие стратегии решения проблем:

  1. Понимание проблемы: Внимательно прочитайте формулировку проблемы, чтобы понять требования и ограничения.
  2. Определите ключевые операции: Определите необходимые ключевые операции, такие как разделение, перестановка и соединение слов.
  3. Оптимизируйте читабельность: Используйте четкую и краткую логику, чтобы код было легко понять.
  4. Тщательное тестирование: Проверьте решение в различных случаях, включая крайние случаи, чтобы убедиться в правильности.

Выявление подобных проблем:

  1. Манипуляция строками:

    • Проблемы, при которых необходимо изменить строки в зависимости от определенных условий.
    • Пример: изменение порядка символов в каждом слове предложения на обратный.
  2. Техника двух ударов:

    • Задачи, в которых использование двух указателей может помочь оптимизировать решение.
    • Пример: удаление дубликатов из отсортированного массива.
  3. Алгоритмы на месте:

    • Проблемы, при которых операции необходимо выполнять на месте с ограниченным дополнительным пространством.
    • Пример: поворот массива вправо на k шагов.

Заключение:

  • Проблему перестановки слов в строке можно эффективно решить, используя как метод грубой силы, так и оптимизированный подход на месте.
  • Понимание проблемы и разбиение ее на управляемые части имеет решающее значение.
  • Использование четкой логики и оптимизация для удобства чтения гарантируют легкость понимания решения.
  • Тестирование с различными крайними случаями обеспечивает надежность.
  • Распознавание закономерностей в проблемах может помочь применить аналогичные решения к другим проблемам.

Практикуя такие задачи и стратегии, вы сможете улучшить свои навыки решения проблем и лучше подготовиться к различным задачам кодирования.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/__zamora__/typescript-coding-chronicles-reverse-words-in-a-string-44no?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected], чтобы удалить это
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3