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

时间:2015-06-26 05:13:43

标签: python python-2.7 substring alphabetical

假设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)))*

1 个答案:

答案 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:两行就足够了。)