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)임을 이해합니다. 하지만 파이썬의 문자열은 불변하지 않습니까? 문자열이 있고 +
연산자를 사용하여 다른 문자열을 추가 하면 필요한 공간을 할당하고 원본을 복사 한 다음 추가 문자열을 복사하지 않습니까?
n
길이가 각각 1 인 문자열 모음이 있으면 다음을 수행합니다.
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
또는 O (n ^ 2) 시간 , 그래? 아니면 파이썬이 추가를 처리하는 방법이 잘못 되었습니까?
또는 낚시하는 법을 가르쳐 주실 수 있다면 어떻게해야합니까? 나는 구글을 공식 소스로 시도하는데 실패했다. https://wiki.python.org/moin/TimeComplexity를 찾았 지만 문자열에 아무것도 없습니다.
urllib.urlencode