【发布时间】:2018-05-16 08:57:59
【问题描述】:
我正在研究流行的 MIT 课程中的“最长字母子串”问题。我已经阅读了很多关于如何编码的信息,但我真的很难在概念上实现飞跃。之前的手指练习并不太难。我想知道是否有人知道那里有任何材料可以真正打破在这个问题中使用的解决问题的方法。我试过拿出笔和纸,但我迷路了。我看到人们使用各种“计数器”或包含“迄今为止最长的子字符串”的字符串,当我查看其他人的解决方案时,我可以理解他们对他们的代码做了什么,但如果我试图合成我自己的东西,只是没有点击。
我什至从课程中休息并尝试通过其他一些书籍学习,但我不断回到这个问题并觉得我需要突破它。我想我正在努力实现从了解一些 Python 语法和工具到实际有机地使用这些工具来解决问题或“计算”的飞跃。
在有人指出我之前,我知道旨在提供帮助的课程材料。我看过其中一位助教制作的一些视频,这些视频有些帮助,但他并没有真正分解这一点。我觉得我需要与某人或类似的人配对编程...
供参考,问题如下:
假设 s 是一串小写字符。
编写一个程序,打印 s 中字母按字母顺序出现的最长子串。例如,如果 s = 'azcbobobegghakl',那么你的程序应该打印
按字母顺序排列的最长子串是:beggh
在平局的情况下,打印第一个子字符串。例如,如果 s = 'abcbcd',那么你的程序应该打印
按字母顺序排列的最长子串是:abc
我知道发布代码很有帮助,但我没有任何其他地方没有的东西,因为,嗯,这就是我在 IDE 中一直在玩的东西,看看我是否能理解发生了什么。同样,不要寻找代码 sn-ps - 更多的阅读或资源将扩展此问题中使用的逻辑。我会发布我所拥有的,但它并不完整,而且在我开始感到困惑之前,我已经做到了。
s = 'azcbobobegghakl'
current = s[0]
longest = s[0]
for letter in range(0, len(s) -1):
if s[letter + 1] >= s[letter]:
current.append(s[letter + 1])
if len(current) > len(longest):
longest = current
else:
current =
抱歉,格式错误,这仍然是新的。我对这个问题感到非常沮丧。
【问题讨论】:
-
@ScipioneSarlo 他有,看看底部
-
我建议首先尝试实现一个更简单、更慢的算法来完成工作。您正在寻找一个按字母顺序排列的子字符串,嗯,它必须从某个地方开始,并且必须在它开始后的某个地方结束——因此可行的方法是尝试所有可能的子字符串,并测试它是否是按字母顺序排列的;如果是这样,还要检查它是否比你迄今为止看到的最长的更长;如果它通过了这两项测试,则使其成为当前的“冠军”。如果现在这看起来太难了,我建议一个更简单的问题:在数字列表中找到最大数字。