我在《计算机科学与编程导论》中使用Python时遇到了这个问题:
假定 s 是小写字符的字符串。
编写一个程序,打印 s 的最长子字符串,其中字母按字母顺序出现。例如,如果
s = 'azcbobobegghakl'
,则程序应打印: 按字母顺序排列的最长子字符串是:beggh。如果是领带,请打印第一个子字符串。例如,如果
s = 'abcbcd'
,则程序应打印: 按字母顺序排列的最长子字符串是:abc。
我已经阅读了很多关于这个问题的答案(代码(。我可以说我理解这些答案背后的逻辑。
但是,我无法理解的是"Python如何知道答案按字母顺序正确?
仅供参考,以下是我在网上看到的正确代码:
s = "azcbobobegghakl"
longest = current = s[0]
for i in range (len(s) - 1):
if s[i+1] >= s[i]:
current += s[i+1]
if len(current) > len(longest):
longest = current
else:
current = s[i+1]
print("Longest substring in alphabetical order is:", longest)
同样,我理解代码背后的逻辑。我不知道的是Python如何知道答案按字母顺序正确。
我知道这可能是一个愚蠢的问题。但是由于我是编程新手,这个问题的答案对我来说意义重大。
在此代码中,条件
if s[i+1] >= s[i]
比较两个字符。在python中,当你比较两个字符时,你是在比较他们的ascii代码。正如您在此处看到的,字符在 ascii 表中按字母顺序排列。
如果按字母顺序排列,则会将其添加到可能的解决方案中。在其他情况下,它只是创建一个新的可能解决方案。
程序跟踪迄今为止找到的最长的字母子字符串(变量longest
(。当它找到一个新的比它已经知道的长(current
(时,它会记住那个(longest = current
(。