使用 Python 打印最长的字母子串,对于并列,打印第一个子串

Print the longest alphabetical substring using Python and for ties, print the first substring

假设s是一串小写字符。 编写一个程序,打印 s 中字母按字母顺序出现的最长子串。

例如,如果 s = 'azcbobobegghakl',那么你的程序应该打印

Longest substring in alphabetical order is: beggh

在并列的情况下,打印第一个子字符串。例如,如果 s = 'abcbcd',那么你的程序应该打印

Longest substring in alphabetical order is: 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)))*

我会通过以下方式解决问题:

  • 让我们定义两个字符串:递增字母的 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 解决方案],但如果它具有相同的长度则不会。


考虑迪伦的评论

你是对的。我更新了代码和描述以正确处理 s 以最长的字母子字符串结尾的情况。 (将 else: 向下移动两行就足够了。)