【问题标题】:Print the longest alphabetical substring using Python and for ties, print the first substring [duplicate]使用 Python 打印最长的字母子字符串,对于领带,打印第一个子字符串 [重复]
【发布时间】:2015-06-26 05:13:42
【问题描述】:

假设 s 是一串小写字符。 编写一个程序,打印 s 中字母按字母顺序出现的最长子串。

例如,如果 s = 'azcbobobegghakl',那么你的程序应该打印

按字母顺序排列的最长子串是:beggh

在平局的情况下,打印第一个子字符串。例如,如果 s = 'abcbcd',那么你的程序应该打印

按字母顺序排列的最长子串是:abc

这是我找到的代码。如何在上面给出的关于关系的问题中实现后一种条件?

    *s = raw_input('provide string: ')
    result = []
    final = []
    for letters in s:
        result = result + [letters]        
        if result == sorted(result) and len(result) >= len(final):
            final = result            
        elif result != sorted(result):
            result = [result[len(result)-1]]        
    print('Longest substring in alphabetical order is: '+(''.join(final)))*

【问题讨论】:

  • 您的问题应该包括您尝试过的代码,以及您遇到的问题。

标签: python python-2.7 substring alphabetical


【解决方案1】:

我会通过以下方式解决问题:

  • 让我们定义两个字符串:增加字母的current 字符串和当前的longest 字符串。
  • 两个字符串都用第一个字母初始化。 (这样我们总能读到他们的最后一封信。)
  • 然后我们遍历输入字符串s(从第二个字符开始)。
  • 如果当前字符 c 满足要求 c >= current[-1],我们将其添加到当前解决方案中。
  • 我们可能将current 字符串存储为longest
  • 如果c 不满足订购要求,我们将从新的解决方案current = c 开始。
  • 最后,我们打印longest 字符串。
s = "azcbobobegghakl"
longest = s[0]
current = s[0]
for c in s[1:]:
    if c >= current[-1]:
        current += c
        if len(current) > len(longest):
            longest = current
    else:
        current = c
print "Longest substring in alphabetical order is:", longest

如何修复您的代码。上述条件:

在比较len(result) >= len(final) 中使用> 而不是>=,即仅在final 解决方案更长 时更新它,但如果它具有相同的长度则不更新。 p>


考虑到 Dylans 的评论

你是对的。我更新了代码和描述以正确处理s 以最长的字母子字符串结尾的情况。 (将else: 向下移动两行就足够了。)

【讨论】:

  • 非常感谢。我是 python 初学者,我不知道如何解决这个问题。
  • 您需要在您的打印语句上方添加一行(在 for 循环之外),即您的 if len(current)> len(longest):longest = current。因为如果你不这样做,forloop 中最长 = current 的更新可能不会发生。试试测试用例 'abcdef' 你就会明白我的意思了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多