最佳答案
我正在处理 CTCI 的一个问题。
第一章的第三个问题是取一个字符串,比如
'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 中的字符串不是一成不变的吗?如果我有一个字符串,并且我用 +
操作符将另一个字符串添加到它,它是否分配了必要的空间,复制原始字符串,然后复制附加的字符串?
如果我有一个长度为1的 n
字符串集合,那么需要:
1 + 2 + 3 + 4 + 5 + ... + n = n(n+1)/2
或者 O (n ^ 2)次,是吗? 或者我错误地理解了 Python 处理附加的方式?
或者,如果你愿意教我如何钓鱼: 我将如何自己去发现这一点?我在谷歌上搜索官方信息来源的尝试失败了。我找到了 https://wiki.python.org/moin/TimeComplexity但是这里没有任何关于字符串的东西。