编辑:我知道在 SO 中已经提出了类似任务的问题,但我有兴趣找出这段特定代码中的问题。我也知道这个问题可以在不使用递归的情况下解决。
任务是编写一个程序,该程序将找到(并打印)其中字母按字母顺序出现的最长子字符串。如果发现超过 1 个相同长度的序列,则应打印第一个。例如,字符串的输出abczabcd
将是abcz
.
我已经用递归解决了这个问题,似乎通过了我的手动测试。但是,当我运行生成随机字符串的自动化测试集时,我注意到在某些情况下,输出不正确。例如:
如果,则s = 'hixwluvyhzzzdgd'
输出是hix
luvy
如果,则s = 'eseoojlsuai'
输出是eoo
jlsu
如果,则s = 'drurotsxjehlwfwgygygxz'
输出是dru
ehlw
经过一段时间的挣扎,我无法弄清楚这些导致错误的字符串有什么特别之处。
这是我的代码:
pos = 0
maxLen = 0
startPos = 0
endPos = 0
def last_pos(pos):
if pos < (len(s) - 1):
if s[pos + 1] >= s[pos]:
pos += 1
if pos == len(s)-1:
return len(s)
else:
return last_pos(pos)
return pos
for i in range(len(s)):
if last_pos(i+1) != None:
diff = last_pos(i) - i
if diff - 1 > maxLen:
maxLen = diff
startPos = i
endPos = startPos + diff
print s[startPos:endPos+1]