ฉันกำลังแก้ไขปัญหาจาก CTCI
ปัญหาที่สามของบทที่ 1 ให้คุณใช้สตริงเช่น
'Mr John Smith '
และขอให้คุณแทนที่ช่องว่างตัวกลางด้วย%20
:
'Mr%20John%20Smith'
ผู้เขียนเสนอวิธีแก้ปัญหานี้ใน Python เรียกว่า 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
คำถามของฉัน:
ฉันเข้าใจว่านี่คือ O (n) ในแง่ของการสแกนผ่านสตริงจริงจากซ้ายไปขวา แต่สตริงใน Python ไม่เปลี่ยนรูปไม่ใช่หรือ ถ้าฉันมีสตริงและเพิ่มสตริงอื่นด้วย+
โอเปอเรเตอร์ไม่ได้จัดสรรพื้นที่ที่จำเป็นคัดลอกทับต้นฉบับแล้วคัดลอกทับสตริงต่อท้ายหรือไม่
หากฉันมีคอลเลกชันของn
สตริงแต่ละความยาว 1 นั่นจะใช้เวลา:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
หรือO (n ^ 2) เวลาใช่หรือไม่? หรือฉันเข้าใจผิดว่า Python จัดการต่อท้ายอย่างไร?
หรือหากคุณยินดีที่จะสอนวิธีตกปลา: ฉันจะหาสิ่งนี้ด้วยตัวเองได้อย่างไร ฉันพยายามหาแหล่งข้อมูลอย่างเป็นทางการของ Google ไม่สำเร็จ ฉันพบhttps://wiki.python.org/moin/TimeComplexityแต่สิ่งนี้ไม่มีอะไรเกี่ยวกับสตริง
urllib.urlencode