创建一个按字母顺序查找最长字符子串的 Python 程序

问题描述

我在 Python 训练营中,我的第一个挑战是创建一个程序,该程序接受一个字符串,例如“s=azcbobobegghakl”,并指示哪个子字符串具有最长的字母连续字母数量。在我的例子中,它应该输出“beggh”。我一直在付出很多努力,并不打算使用任何库,只是使用 Python 基础。我知道有非常有效的方法来完成这项任务,但我正在努力坚持课堂上所教的内容。请不要太花哨。随意给我留下碎屑痕迹。这是我目前所拥有的:

输入: "

s='azcbobobegghakl'
Longest=""
for order in range(len(s)):
    if s[order] >= "a":
        Longest += s[order]
    else: 
        Longest=""
print(Longest):

Output:
"azcbobobegghakl

到目前为止,我有一个程序可以打印字母串,只要它们大于或等于“a”,就是所有字母。有人可以从这里帮助我吗?我知道还有许多其他解决方案,但我只是想坚持到目前为止该类所经历的一切,这将是循环和 if 语句。同样,我不是在寻找答案,而是请提供一些提示。谢谢!

解决方法

alphabet = 'abcdefghijklmnopqrstuvwxyz'
def longest_alpha(string):
    current = string[0]
    longest = ''
    for idx in range(len(string)-1):
        if alphabet.index(string[idx]) <= alphabet.index(string[idx+1]):
            current += string[idx+1]
        else:
            current = string[idx+1]
        
        if len(current) > len(longest):
            longest = current
    return longest
,

您可以尝试运行此示例,看看您是否有任何问题:

s = 'azcbobobegghakl'

from itertools import count

def long_alphabet(string):
    max_substr = ""         # empty slice (to accept subclasses of str)

    N = len(string)
    
    for start in range(N):      # O(n)
        for end in count(start + len(max_substr) + 1):   #
            substr = string[start: end]                     
            
            if len(substr) != (end - start):             #  found sup. or End
                break            
            if sorted(substr) == list(substr):
                max_substr = substr
    return max_substr

ans = (long_alphabet(s))      # beggh <---
print(f"Longest substring in alphabetical order is: {ans} ")