Я работаю над проблемой из 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, но это ничего не имеет в строках.