相关疑难解决方法(0)

这个时间复杂度实际上是O(n ^ 2)吗?

我正在研究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
Run Code Online (Sandbox Code Playgroud)

我的问题:

我理解这是从左到右扫描实际字符串的O(n).但是Python中的字符串不是不可变的吗?如果我有一个字符串,我用+操作符添加另一个字符串,它是否分配必要的空格,复制原始字符串,然后复制附加字符串?

如果我有一个n长度为1 的字符串集合,则需要:

1 + 2 + 3 + 4 …

python string algorithm string-concatenation

82
推荐指数
3
解决办法
6085
查看次数

__getitem__、__setitem__ 如何处理切片?

我正在运行 Python 2.7.10。

我需要拦截列表中的更改。我所说的“更改”是指在浅层意义上修改列表的任何内容(如果列表由相同顺序的相同对象组成,则不会更改,而不管这些对象的状态如何;否则,则更改)。我不需要找出列表是如何改变的,只需要知道它已经改变了。所以我只是确保我可以检测到它,并让基本方法完成它的工作。这是我的测试程序:

class List(list):
    def __init__(self, data):
        list.__init__(self, data)
        print '__init__(', data, '):', self

    def __getitem__(self, key):
        print 'calling __getitem__(', self, ',', key, ')',
        r = list.__getitem__(self, key)
        print '-->', r
        return r

    def __setitem__(self, key, data):
        print 'before __setitem__:', self
        list.__setitem__(self, key, data)
        print 'after  __setitem__(', key, ',', data, '):', self

    def __delitem__(self, key):
        print 'before __delitem__:', self
        list.__delitem__(self, key)
        print 'after  __delitem__(', key, '):', self

l = List([0,1,2,3,4,5,6,7]) #1
x = l[5]                    #2
l[3] …
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
3151
查看次数

标签 统计

python ×2

algorithm ×1

string ×1

string-concatenation ×1