这一个在这里:
s = raw_input()a=len(s)for i in xrange(0, a): for j in xrange(0, a): if j >= i: if len(s[i:j+1]) > 0: sub_strings.append(s[i:j+1])
对于大型字符串,这似乎非常低效且昂贵。
做得更好
for i in xrange(0, a): for j in xrange(i, a): # ensures that j >= i, no test required part = buffer(s, i, j+1-i) # don't duplicate data if len(part) > 0: sub_Strings.append(part)
缓冲区对象保留对原始字符串以及开始和长度属性的引用。这样,不会发生不必要的数据重复。
长度的字符串
l具有
l*l/2平均长度的子串
l/2,所以内存消耗将大致是
l*l*l/4。使用缓冲区,它要小得多。
请注意,
buffer()仅在2.x中存在。3.x具有
memoryview(),其使用情况略有不同。
更好的方法是计算索引并按需剪切子字符串。



