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()
,其使用情况略有不同。
更好的方法是计算索引并按需剪切子字符串。