私はCTCIの問題に取り組んでいます。
第1章の3番目の問題は、次のような文字列を取ることです。
'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が追加を処理する方法を間違えていますか?
あるいは、釣り方を教えてくれるなら、どうやってこれを自分で見つけようか?私は公式の情報源をグーグルで検索しようとして失敗しました。https://wiki.python.org/moin/TimeComplexityを見つけましたが、文字列には何もありません。
urllib.urlencode