Python 3.x 在较长的字符串中查找最长的字母顺序子字符串

Python 3.x 在较长的字符串中查找最长的字母顺序子字符串,python-3.x,Python 3.x,我曾经尝试过编写这段代码,但它并没有始终如一地解决问题。通常它不会输出字符串中的第一个和最后一个字符。我不知道我哪里出了问题,在这一点上我有点不知所措,有人能给我解释一下我的代码哪里出了问题,以及如何修复它吗 s = ' abcdekyuuhhoowhoiwv ' longS = '' tempS = '' for x in range(len(s)-1): if s[x] <= s[x+1]: longS += s[x+1] if len(long

我曾经尝试过编写这段代码,但它并没有始终如一地解决问题。通常它不会输出字符串中的第一个和最后一个字符。我不知道我哪里出了问题,在这一点上我有点不知所措,有人能给我解释一下我的代码哪里出了问题,以及如何修复它吗

s = ' abcdekyuuhhoowhoiwv '
longS = ''
tempS = ''
for x in range(len(s)-1):
    if s[x] <= s[x+1]:
        longS += s[x+1]
        if len(longS) < len(tempS):
            tempS = longS
    else:
        tempS = s[x+1]
print('Longest substring in alphabetical order is: ' + str(longS)) 
s='abcdekyuhuohohowiwv'
长=“”
tempS=''
对于范围内的x(透镜-1):

如果可以避免在循环中使用索引,那么s[x]Python就容易多了。它的设计是为了让这变得容易,因为索引本身很难被一个错误所忽略。例如,在您的代码中,您从不使用
s[x]
,因此您总是错过字符串的第一个字母

解决这个问题的一种方法是跟踪变量中的最后一个字母。用第一个字母初始化,然后迭代其余字母。然后它变得非常可读:

s = 'abcdekyuuhhoowhoiwv'

# initialize
last = s[0]
current = last
longest = last

# loop letters starting at the second
for letter in s[1:]:
    if letter >= last:
        current += letter    
    else:
        current = letter  
    if len(current) > len(longest):
        longest = current

    last = letter

print(longest)
# 'abcdeky'

此外,我没有测试上面的空字符串,但如果有可能的话,您可能应该测试。

我使用的是动态编程。我的解决方案还输出许多解决方案(如果存在)

s=input()
a=[1]
对于范围(1,len)中的i:

如果作战需求文件[i-1]),预期输出是什么?