Я работаю над проблемой вне CTCI.
Третья задача главы 1 - взять строку, например
'Mr John Smith '
и просит вас заменить промежуточные пробелы на %20
:
'Mr%20John%20Smith'
Автор предлагает это решение на Python, назвав его O (n):
def urlify(string, length):
'''function replaces single spaces with %20 and removes trailing spaces'''
counter = 0
output = ''
for char in string:
counter += 1
if counter > length:
return output
elif char == ' ':
output = output + '%20'
elif char != ' ':
output = output + char
return output
Мой вопрос:
Я понимаю, что это O (n) с точки зрения сканирования фактической строки слева направо. Но разве строки в Python не неизменны? Если у меня есть строка, и я добавляю к ней еще одну строку с помощью +
оператора, разве он не выделяет необходимое пространство, не копирует оригинал, а затем копирует добавляемую строку?
Если у меня есть набор n
строк длиной 1, для этого потребуется:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
или время O (n ^ 2) , да? Или я ошибаюсь в том, как Python обрабатывает добавление?
В качестве альтернативы, если вы захотите научить меня ловить рыбу: как бы я узнал это для себя? Я безуспешно пытался найти официальный источник в Google. Я нашел https://wiki.python.org/moin/TimeComplexity, но там ничего не сказано о строках.
urllib.urlencode