0

我正在尝试了解此代码在幕后的工作原理,感谢您的帮助

请解释这部分:

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)
4

1 回答 1

3

更清楚地写出代码,它读取

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

如果帐户变得大于先前的最大值,则等于maximumaccount

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

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

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

else原因:

else:
    account = c

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

最终,maximum会是你想要的。

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

于 2018-01-05T06:03:50.837 回答