Je suis en train de travailler sur un problème de la CTCI.
Le troisième problème, chapitre 1, a vous de prendre une chaîne telle que
'Mr John Smith '
et vous demande de remplacer les espaces intermédiaires avec %20
:
'Mr%20John%20Smith'
L'auteur propose cette solution en Python, le qualifiant 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
Ma question:
Je comprends que c'est O(n) en termes de numérisation par le biais de la chaîne de gauche à droite. Mais ne sont pas des chaînes de caractères en Python immuable? Si j'ai un string et j'ajoute une autre corde à l'aide de l' +
de l'opérateur, n'est-ce pas allouer l'espace nécessaire, la copie à l'original, et puis les copier sur l'ajout de la chaîne?
Si j'ai une collection de n
cordes de longueur 1, puis qui prend:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
ou O(n^2) temps, oui? Ou suis-je trompé dans la façon Python gère ajoutant?
Alternativement, si vous seriez prêt à m'enseigner comment pêcher: Comment pourrais-je aller sur la recherche de ce pour moi? J'ai échoué dans mes tentatives de Google une source officielle. J'ai trouvé https://wiki.python.org/moin/TimeComplexity mais cela ne veut pas avoir quoi que ce soit sur les chaînes de caractères.