Pracuję nad problemem z CTCI.
Trzeci problem z rozdziału 1 polega na tym, że bierzesz ciąg, taki jak
'Mr John Smith '
i prosi o zastąpienie spacji pośrednich %20
:
'Mr%20John%20Smith'
Autor oferuje takie rozwiązanie w Pythonie, nazywając je 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
Moje pytanie:
Rozumiem, że jest to O (n) pod względem przeglądania rzeczywistego ciągu od lewej do prawej. Ale czy łańcuchy w Pythonie nie są niezmienne? Jeśli mam ciąg i dodam do niego kolejny ciąg z +
operatorem, czy nie przydziela on niezbędnej przestrzeni, nie kopiuje oryginału, a następnie kopiuje dołączany ciąg?
Jeśli mam kolekcję n
ciągów o długości 1, to przyjmuje:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
lub O (n ^ 2) czas , tak? A może mylę się co do tego, jak Python obsługuje dołączanie?
Ewentualnie, gdybyś zechciał nauczyć mnie łowić ryby: jak bym się tego nauczył? Nie udało mi się znaleźć oficjalnego źródła w Google. Znalazłem https://wiki.python.org/moin/TimeComplexity, ale to nie ma nic na łańcuchach.
urllib.urlencode