Tôi đang giải quyết một vấn đề của CTCI.
Vấn đề thứ ba của chương 1 có bạn lấy một chuỗi chẳng hạn như
'Mr John Smith '
và yêu cầu bạn thay thế các khoảng trắng trung gian bằng %20
:
'Mr%20John%20Smith'
Tác giả đưa ra giải pháp này bằng Python, gọi nó là 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
Câu hỏi của tôi:
Tôi hiểu rằng đây là O (n) theo nghĩa quét qua chuỗi thực tế từ trái sang phải. Nhưng không phải các chuỗi trong Python là bất biến? Nếu tôi có một chuỗi và tôi thêm một chuỗi khác vào nó bằng +
toán tử, nó không phân bổ không gian cần thiết, sao chép qua bản gốc và sau đó sao chép qua chuỗi thêm vào?
Nếu tôi có một tập hợp các n
chuỗi có độ dài 1, thì điều đó sẽ mất:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
hoặc O (n ^ 2) thời gian , có? Hay tôi nhầm lẫn trong cách Python xử lý việc nối thêm?
Ngoài ra, nếu bạn sẵn sàng dạy tôi cách câu cá: Làm thế nào để tôi tự tìm hiểu điều này? Tôi đã không thành công trong nỗ lực tìm kiếm nguồn chính thức của Google. Tôi đã tìm thấy https://wiki.python.org/moin/TimeComplexity nhưng điều này không có bất kỳ thứ gì trên chuỗi.
urllib.urlencode