Обратные слова в строке (слова разделенных одним или несколькими пробелами). Теперь сделайте это на месте.
Что означает место на месте?
Обратные слова в строке (слова разделенных одним или несколькими пробелами). Теперь сделайте это на месте.
Что означает место на месте?
На месте означает, что вы должны обновить исходную строку, а не создавать новую.
В зависимости от языка/рамки, которые вы используете, это невозможно. (Например, строки неизменяемы в .NET и Java, поэтому было бы невозможно выполнить обновление на месте на месте, не прибегая к каким-то злым хакам.)
Внутрисегментные алгоритмы могут использовать только O(1)
дополнительное пространство. Классический пример - разворот массива (по сути, вопрос интервью). Из Википедии взято следующее:
Предположим, мы хотим изменить массив из n элементов. Один простой способ сделать это:
function reverse(a[0..n]) allocate b[0..n] for i from 0 to n b[n - i] = a[i] return b
К сожалению, для создания массива
b
для этого требуетсяO(n)
дополнительное пространство, а распределение часто является медленной операцией. Если нам больше не понадобитсяa
, мы можем вместо этого перезаписать его с помощью своего собственного обращения, используя этот алгоритм на месте:function reverse-in-place(a[0..n]) for i from 0 to floor(n/2) swap(a[i], a[n-i])
Иногда делать что-то на месте ОЧЕНЬ ЖЕСТКО. Классическим примером является общая неквадратная матричная транспозиция.
Вы должны изменить содержимое исходной строки на обратную, не используя переменную временного хранения, чтобы удерживать строку.