UniLecs #Task. Advanced Reverse string

Albert Davletov
UniLecs
Published in
2 min readJun 21, 2020

Задача: дана строка из набора слов, разделенных пробелами. Необходимо выполнить реверс строки.

Входные данные: входная строка представлена массивом символов.

Вывод: массив символов, который содержит требуемый реверс строки.

Примечание:

  1. Слово определяется как последовательность непробельных символов.
  2. Входная строка не содержит пробелы в начале и в конце.
  3. Слова разделяются только одним пробелом.

Условие: для преобразования можно использовать только исходный массив (т.е. O(1) по памяти).

Пример:

[“o”, “n”, “e”, “ “, “t”, “w”, “o”, “ “, “t”, “h”, “r”, “e”, “e”, “ “, “f”, “o”, “u”, “r”, “ “, “f”, “i”, “v”, “e”]

Output:

[“f”, “i”, “v”, “e”, “ “, “f”, “o”, “u”, “r”, “ “, “t”, “h”, “r”, “e”, “e”, “ “, “t”, “w”, “o”, “ “, “o”, “n”, “e”]

Разбор

Выполним задачу следующим способом:

  1. Сделаем реверс всей строки. Для преобразования воспользуемся двумя указателями. Первый указатель пойдет по строке сначала, другой с конца. Далее будем менять местами элементы, пока указатели не встретятся.
  2. Теперь сделаем реверс для каждого слова в строке. Зная границы каждого слова мы также воспользуемся методом преобразования с помощью 2х указателей.

Реализация

C#
C#

https://gist.github.com/unilecs/16f505b91d0addcc74e9a6a7018891b2

Play-test

https://dotnetfiddle.net/qmliiM

--

--