Ich arbeite an einem Problem mit CTCI.
Das dritte Problem in Kapitel 1 besteht darin, dass Sie eine Zeichenfolge wie z
'Mr John Smith '
und fordert Sie auf, die Zwischenräume durch Folgendes zu ersetzen %20
:
'Mr%20John%20Smith'
Der Autor bietet diese Lösung in Python an und nennt sie 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
Meine Frage:
Ich verstehe, dass dies O (n) ist, wenn die tatsächliche Zeichenfolge von links nach rechts durchsucht wird. Aber sind Strings in Python nicht unveränderlich? Wenn ich eine Zeichenfolge habe und mit der eine weitere Zeichenfolge hinzufüge+
Operator , weist sie dann nicht den erforderlichen Speicherplatz zu, kopiert sie über das Original und kopiert sie dann über die anhängende Zeichenfolge?
Wenn ich eine Sammlung von n
Zeichenfolgen mit der Länge 1 habe, dann dauert das:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
oder O (n ^ 2) Zeit , ja? Oder irre ich mich darin, wie Python mit dem Anhängen umgeht?
Alternativ, wenn Sie mir das Fischen beibringen möchten: Wie würde ich das selbst herausfinden? Ich habe bei meinen Versuchen, eine offizielle Quelle zu googeln, keinen Erfolg gehabt. Ich habe https://wiki.python.org/moin/TimeComplexity gefunden, aber dies hat nichts mit Zeichenfolgen zu tun.
rtrim
und replace
wäre bevorzugter und im Baseballstadion vonO(n)
. Das Kopieren über Zeichenfolgen scheint der am wenigsten effiziente Weg zu sein.
urllib.urlencode