Estou trabalhando em um problema fora do CTCI.
O terceiro problema do capítulo 1 exige que você pegue uma string como
'Mr John Smith '
e pede que você substitua os espaços intermediários por %20
:
'Mr%20John%20Smith'
O autor oferece essa solução em Python, chamando-a de 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
Minha pergunta:
Eu entendo que este é O (n) em termos de digitalização através da string real da esquerda para a direita. Mas as strings em Python não são imutáveis? Se eu tiver uma string e adicionar outra string a ela com o +
operador, isso não aloca o espaço necessário, copia sobre o original e, em seguida, copia sobre a string anexada?
Se eu tiver uma coleção de n
strings de comprimento 1, isso leva:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
ou O (n ^ 2) vez , sim? Ou estou enganado em como o Python lida com a adição?
Alternativamente, se você estiver disposto a me ensinar a pescar: como eu faria para descobrir isso sozinho? Não tive sucesso em minhas tentativas de pesquisar uma fonte oficial no Google. Encontrei https://wiki.python.org/moin/TimeComplexity, mas não tem nada sobre strings.
urllib.urlencode