python 中关于查找最长子串的代码,我需要解释

this code in python about finding the longest sub-string , i need explaination

我想了解这段代码是如何工作的在幕后,感谢帮助

请解释这部分:

MAX = ACCOUNT if len(ACCOUNT) > len(MAX) else MAX
ACCOUNT = ACCOUNT + c if c >= ACCOUNT[-1] else c

============================================= ===

S = 'azcbobobegghaklbob'

ACCOUNT, MAX = S[0], ""

for c in S[1:] + " ":
    MAX = ACCOUNT if len(ACCOUNT) > len(MAX) else MAX
    ACCOUNT = ACCOUNT + c if c >= ACCOUNT[-1] else c

print('Longest substring in alphabetical order is:', MAX)

把代码写得更清楚一点,就是

s = 'azcbobobegghaklbob'
account = S[0]
maximum = ''
for c in s[1:] + ' ':
    if len(account) > len(maximum):
        maximum = account
    if c >= account[-1]:
        account += c
    else:
        account = c
print('Longest substring in alphabetical order is:', maximum)

maximum 是目前为止按字母顺序排列的最长子串。 account 是按字母顺序计算的当前子字符串。

for 循环遍历 'zcbobobegghaklbob 'account 作为字符串的第一个字符开始。第一个if块:

if len(account) > len(maximum):
    maximum = account

如果帐户大于之前的最大值,则 maximum 等于 account

c 是下一个要分析的字符,就在 account 的最后一个字符之后。第二个if块:

if c >= account[-1]:
    account += c

查看 c 是否按字母顺序排在 account 的最后一个字符之后。如果是,则将其添加到 account 的末尾。 >= 对字符串的比较会按字典顺序对相同大小写的字母字符进行排序。

else原因:

else:
    account = c

如果下一个字符不按字母顺序,则清除当前子字符串并重新开始。

最终maximum会如你所愿

额外的 ' ' 也被迭代,以便第一个 if 语句将在循环完成之前再执行一次。在 python 中,' ' 按字典顺序排在所有字母字符之前。