【发布时间】:2013-12-11 02:23:22
【问题描述】:
我想知道我的 MIT 在线 edx 课堂练习题的代码与提供的答案代码之间的区别。
课堂上的作业如下:
编写一个程序,打印 s 的最长子串,其中 字母按字母顺序出现。例如,如果 s = 'azcbobobegghakl',那么你的程序应该打印出来
按字母顺序排列的最长子串是:beggh
我们的自动化测试将为您提供 s 的值
我的成功代码:
curSlice='z'
for b in range(len(s)):
for e in range(b+1,len(s)):
if s[e-1]<=s[e]:
if len(s[b:e+1])>len(aas):
aas=s[b:e+1]
else:
break
print('Longest substring in alphabetical order is: '+str(aas))
逻辑是增加一个开始的字符串字母并测试每个后续字母的增加值,然后存储切片,如果大于当前切片,直到测试失败并且开始字母增加一。此时流程重新开始。
麻省理工学院的代码:
curString = s[0]
longest = s[0]
for i in range(1, len(s)):
if s[i] >= curString[-1]:
curString += s[i]
if len(curString) > len(longest):
longest = curString
else:
curString = s[i]
print 'Longest substring in alphabetical order is:', longest
哪个代码更高效?它们的长度大致相同,但我的有两个环。这是否使它没有优化?谢谢
【问题讨论】:
-
两个嵌套循环几乎总是比一个循环慢得多,但您也可以在每个函数中抛出一个较大的输入来查看哪个更快。
-
感谢您的编辑 Potatoswatter
标签: python for-loop time-complexity