【问题标题】:Why does Python know the answer is alphabetically correct using the following code?为什么 Python 使用下面的代码知道答案是按字母顺序正确的?
【发布时间】:2019-08-07 04:55:42
【问题描述】:

我在计算机科学和 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 如何知道答案是否按字母顺序正确。

我知道这可能是一个愚蠢的问题。但由于我是编程新手,这个问题的答案对我来说意义重大。

【问题讨论】:

  • 为什么需要排序?,如果按字母顺序对字符串进行排序,则按字母顺序排列的最长子字符串将是排序后的字符串本身。再次阅读问题最长的子字符串是azcbobo[beggh]akl
  • 我不明白“理解这些答案背后的逻辑”是什么意思。因为您的示例只是一个普通的常见简单解决方案。
  • 嗨,现在我看看我的问题,它措辞不当。我的意思是 Python 如何知道答案是否按字母顺序正确。

标签: python substring alphabetical


【解决方案1】:

在这段代码中,条件

if s[i+1] >= s[i]

比较两个字符。在 python 中,当你比较两个字符时,你是在比较它们的 ascii 代码。如您所见here,字符在ascii表中按字母顺序排列。

如果按字母顺序排列,则将其添加到可能的解决方案中。在其他情况下,它只是创建一个新的可能的解决方案。

【讨论】:

    【解决方案2】:

    程序会跟踪它迄今为止发现的最长的字母子串(变量longest)。当它发现一个比它已经知道的(current)更长的新的时,它会记住那个(longest = current)。

    【讨论】:

    • 嗨,现在我看看我的问题,它措辞不当。我的意思是 Python 如何知道答案是否按字母顺序正确。
    • 因为字符i+1(下一个字符)大于字符i(当前字符)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多