Estoy trabajando en un problema de CTCI.
El tercer problema del capítulo 1 tiene que tomar una cadena como
'Mr John Smith '
y le pide que reemplace los espacios intermedios con %20
:
'Mr%20John%20Smith'
El autor ofrece esta solución en Python, llamándola 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
Mi pregunta:
Entiendo que esto es O (n) en términos de escanear la cadena real de izquierda a derecha. ¿Pero no son inmutables las cadenas en Python? Si tengo una cadena y le agrego otra cadena con el +
operador, ¿no asigna el espacio necesario, copia sobre el original y luego copia sobre la cadena adjunta?
Si tengo una colección de n
cadenas de cada uno de longitud 1, entonces eso requiere:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
o O (n ^ 2) tiempo , ¿sí? ¿O me equivoco en cómo Python maneja la agregación?
Alternativamente, si estuvieras dispuesto a enseñarme a pescar: ¿Cómo haría para descubrir esto por mí mismo? No he tenido éxito en mis intentos de buscar en Google una fuente oficial. Encontré https://wiki.python.org/moin/TimeComplexity pero esto no tiene nada en las cadenas.
urllib.urlencode