Sto lavorando a un problema fuori dal CTCI.
Il terzo problema del capitolo 1 ti fa prendere una stringa come
'Mr John Smith '
e ti chiede di sostituire gli spazi intermedi con %20
:
'Mr%20John%20Smith'
L'autore offre questa soluzione in Python, chiamandola 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
La mia domanda:
Capisco che questo è O (n) in termini di scansione attraverso la stringa effettiva da sinistra a destra. Ma le stringhe in Python non sono immutabili? Se ho una stringa e aggiungo un'altra stringa con l' +
operatore, non alloca lo spazio necessario, copia sull'originale e quindi copia sulla stringa aggiunta?
Se ho una raccolta di n
stringhe ciascuna di lunghezza 1, allora ciò richiede:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
o O (n ^ 2) volta , sì? O mi sbaglio nel modo in cui Python gestisce l'aggiunta?
In alternativa, se tu fossi disposto a insegnarmi a pescare: come potrei scoprirlo da solo? Non ho avuto successo nei miei tentativi di Google una fonte ufficiale. Ho trovato https://wiki.python.org/moin/TimeComplexity ma questo non ha nulla sulle stringhe.
urllib.urlencode