Saya sedang mengerjakan masalah di luar CTCI.
Masalah ketiga dari bab 1 apakah Anda mengambil string seperti
'Mr John Smith '
dan meminta Anda untuk mengganti ruang perantara dengan %20
:
'Mr%20John%20Smith'
Penulis menawarkan solusi ini dengan Python, menyebutnya 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
Pertanyaan saya:
Saya memahami bahwa ini adalah O (n) dalam hal pemindaian melalui string aktual dari kiri ke kanan. Tapi bukankah string dalam Python tidak bisa diubah? Jika saya memiliki string dan saya menambahkan string lain ke dalamnya dengan +
operator, bukankah itu mengalokasikan ruang yang diperlukan, salin yang asli, dan kemudian salin string tambahan?
Jika saya memiliki kumpulan n
string masing-masing dengan panjang 1, maka itu membutuhkan:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
atau O (n ^ 2) waktu , ya? Atau apakah saya salah dalam cara Python menangani penambahan?
Atau, jika Anda bersedia mengajari saya cara memancing: Bagaimana saya akan mencari tahu sendiri? Saya tidak berhasil dalam upaya saya menggunakan sumber resmi Google. Saya menemukan https://wiki.python.org/moin/TimeComplexity tetapi ini tidak memiliki apa pun di string.
urllib.urlencode