Я працюю над проблемою поза 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