Je travaille sur un problème avec CTCI.
Le troisième problème du chapitre 1 consiste à prendre une chaîne telle que
'Mr John Smith '
et vous demande de remplacer les espaces intermédiaires par %20
:
'Mr%20John%20Smith'
L'auteur propose cette solution en Python, en l'appelant 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
Ma question:
Je comprends que c'est O (n) en termes de balayage de la chaîne réelle de gauche à droite. Mais les chaînes en Python ne sont-elles pas immuables? Si j'ai une chaîne et que j'y ajoute une autre chaîne avec l' +
opérateur, n'alloue-t-elle pas l'espace nécessaire, ne copie-t-elle pas l'original, puis ne copie-t-elle pas la chaîne d'ajout?
Si j'ai une collection de n
chaînes chacune de longueur 1, alors cela prend:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
ou O (n ^ 2) fois , oui? Ou est-ce que je me trompe sur la façon dont Python gère l'ajout?
Sinon, si vous êtes prêt à m'apprendre à pêcher: comment pourrais-je le découvrir par moi-même? J'ai échoué dans mes tentatives pour rechercher une source officielle sur Google. J'ai trouvé https://wiki.python.org/moin/TimeComplexity mais cela n'a rien sur les chaînes.
urllib.urlencode