дублировать каждый пробел в данной строке - PullRequest
0 голосов
/ 08 июня 2019

Я нашел следующий вопрос во многих интервью (не мое интервью).

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

Я не понимаю, как реализовать это без переопределения букв.

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Для переноса строки после найденного пробела требуется одна буква. Чтобы сократить время, необходимое для уменьшения смещения, я бы использовал этот подход:

  1. Подсчитайте количество пробелов. Я назову этот счет c.
  2. Сдвиньте строку на количество пробелов вправо (здесь я предполагаю направление чтения слева направо).
  3. Запустить цикл, начиная со смещения c до конца строки:
    1. Инициализировать счетчик для уже дублированного пространства, называемого s, с 0
    2. Копировать букву из текущей позиции в текущую позицию - c + s
    3. Если буква была пробелом, увеличьте s и добавьте пробел к позиции - c + 1

Не уверен, что все смещения правильно рассчитаны в моем уме, исправьте его, если необходимо. Но потому что это просто вопрос к идее, это просто набросать правильный алгоритм.

0 голосов
/ 08 июня 2019

В вашем вопросе не так много контекста.Давайте предположим, что это интервью по программированию, и вы имеете дело с языком низкого уровня, таким как C или ассемблер.Давайте также предположим, что строка имеет счетчик и / или оканчивается нулем, например, «это строка \ 0 \ 0 \ 0 \ 0»

Я бы просканировал строку от начала до конца и посчиталпробелами, давайте назовем это C. Затем я буду работать через строку на символе за раз, перемещая каждый символ вперед на позиции C.Каждый раз, когда пробел встречается, копируйте пробел вперед на C позиций, вычитайте один из C и затем перемещайте пробел на C позиций.Останов, когда C равно 0.

Здесь нули / неиспользованные представлены точкой.

this is a string....  C=3
this is a string..g.
this is a string.ng.
this is a stringing.
this is a strinring.
this is a stritring.
this is a strstring.
this is a st string.
this is a s  string. C=2
this is a a  string.
this is   a  string.
this iss  a  string.  C=1
this iis  a  string.  
this  is  a  string.  C=0
...