我正在研究流行的麻省理工学院课程中的“最长字母子串”问题。我已经阅读了很多关于如何编码的信息,但我真的很难在概念上实现飞跃。前面的手指练习并不太难。我想知道是否有人知道任何材料可以真正打破这个问题中所采用的问题解决方法。我试着拿出笔和纸,但我只是迷路了。我看到人们使用某种“计数器”,或者包含“迄今为止最长的子字符串”的字符串,当我查看其他人的解决方案时,我可以理解他们对代码做了什么,但如果我试图合成我自己的东西,只是不点击。
我什至从课程中休息了一下,尝试通过其他一些书籍进行学习,但我不断回到这个问题,觉得我需要突破它。我想我正在努力解决的是从了解一些 Python 语法和工具到实际有机地使用这些工具来解决问题或“计算”的飞跃。
在有人向我指出之前,我知道旨在提供帮助的课程材料。我看过一位助教制作的一些视频,这些视频有些帮助,但他并没有真正详细说明这一点。我觉得我需要与某人结对编程,或者类似......坐在白板前,让有人一步步引导我并回答我提出的每个愚蠢问题。
供参考,问题如下:
假设 s 是一串小写字符。
编写一个程序,打印 s 中字母按字母顺序出现的最长子串。例如,如果 s = 'azcbobobegghakl',那么您的程序应该打印
按字母顺序排列的最长子串是:beggh
如果是平局,则打印第一个子字符串。例如,如果 s = 'abbcbcd',那么你的程序应该打印
按字母顺序排列的最长子串是:abc
我知道发布代码很有帮助,但我没有任何其他地方没有的东西,因为,好吧,这就是我在 IDE 中一直在玩的东西,看看我是否能理解发生了什么。再次强调,不要寻找代码片段 - 更多的阅读或资源将扩展此问题中使用的逻辑。我将发布我所拥有的内容,但它并不完整,并且是我在开始感到困惑之前所得到的。
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 =
抱歉,格式错误,对此仍然陌生。我真的对这个问题感到沮丧。
在你的例子中你已经差不多了,只需要一点调整
s = 'azcbobobegghakl'
longest = [s[0],] # make them lists so we can manipulate them (unlike strings)
current = [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 = [s[letter+1],] # reset current if we break an alphabetical chain
longest_string = ''.join(longest) # turn out list back into a string
的输出longest_string
:
'beegh'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)