假设s是一个小写字符串。 编写一个程序,打印s中最长的子字符串,其中字母按字母顺序出现。
例如,如果s =' azcbobobegghakl',那么您的程序应该打印
按字母顺序排列的最长子字符串是:beggh
在tie的情况下,打印第一个子字符串。例如,如果s =' abcbcd',那么您的程序应该打印
按字母顺序排列的最长子字符串是:abc
这是我找到的代码。如何在上面提到的关于关系的问题中实现后一种条件?
*s = raw_input('provide string: ')
result = []
final = []
for letters in s:
result = result + [letters]
if result == sorted(result) and len(result) >= len(final):
final = result
elif result != sorted(result):
result = [result[len(result)-1]]
print('Longest substring in alphabetical order is: '+(''.join(final)))*
答案 0 :(得分:4)
我以下列方式解决问题:
current
字符串增加字母和当前longest
字符串。s
(从第二个字符开始)。c
符合要求c >= current[-1]
,我们会将其添加到当前解决方案中。current
字符串存储为longest
。c
无法满足订购要求,我们将从新的解决方案current = c
开始。longest
字符串。s = "azcbobobegghakl"
longest = s[0]
current = s[0]
for c in s[1:]:
if c >= current[-1]:
current += c
if len(current) > len(longest):
longest = current
else:
current = c
print "Longest substring in alphabetical order is:", longest
如何解决您的代码问题。提到的条件:
在比较>
中使用>=
代替len(result) >= len(final)
,即只有final
解决方案更长才会更新,但如果它的长度相同。
考虑Dylans评论
你是对的。我更新了代码和描述,以正确处理s
以最长字母子字符串结尾的情况。 (向下移动else:
两行就足够了。)