python - 如何在Python中打印给定字符串的最长字母子串?

标签 python string

我总体上是编码新手,一直在通过 edX 平台进行学习。第一个作业要求我们编写一段代码来打印给定字符串中最长的字母子字符串。

我尝试在互联网上到处查找,但我能找到的只是固定的答案,而不是为什么我的代码不起作用。我需要一些帮助来找出原因,因为这在我的脑海中是有道理的。

代码:

s = 'abcdszabc'
start = 0
end = 0
a = ''
b = ''

while len(b) < len(s[start:]):
    while s[end] <= s[end+1]:
        end += 1
    a = s[start:end+1]
    if a > b:
        b = a
    print(b)
    start += 1
    end = start

当我运行时,它检索到一个错误,声称:

while s[end] <= s[end+1]:
    IndexError: string index out of range

这没有意义,因为第一个 while 应该在进入第二个 while 之前评估 b 字符串的大小。在我的例子中,b 将在第一次尝试中被分配为“abcdsz”,当剩下的字符少于 6 个时,程序应该在第一次尝试中停止循环(因为进一步搜索没有意义)。

任何人都可以在不给我直接解决方案的情况下启发我吗?我正在尽力自己解决这个问题,不剧透!

最佳答案

将基本跟踪应用于您的代码...

while len(b) < len(s[start:]):
    print ("WHILE 1", s, end)
    while s[end] <= s[end+1]:
        end += 1
        print ("WHILE 2", s, end)
    a = s[start:end+1]
    if a > b:
        b = a
    print("RESULT", b)
    start += 1
    end = start

输出:

WHILE 1 abcdszabc 0
WHILE 2 abcdszabc 1
WHILE 2 abcdszabc 2
WHILE 2 abcdszabc 3
WHILE 2 abcdszabc 4
WHILE 2 abcdszabc 5
RESULT abcdsz
WHILE 1 abcdszabc 1
WHILE 2 abcdszabc 2
WHILE 2 abcdszabc 3
WHILE 2 abcdszabc 4
WHILE 2 abcdszabc 5
RESULT bcdsz
WHILE 1 abcdszabc 2
WHILE 2 abcdszabc 3
WHILE 2 abcdszabc 4
WHILE 2 abcdszabc 5
RESULT cdsz
WHILE 1 abcdszabc 3
WHILE 2 abcdszabc 4
WHILE 2 abcdszabc 5
RESULT dsz
WHILE 1 abcdszabc 4
WHILE 2 abcdszabc 5
RESULT sz
WHILE 1 abcdszabc 5
RESULT z
WHILE 1 abcdszabc 6
WHILE 2 abcdszabc 7
WHILE 2 abcdszabc 8
Traceback (most recent call last):
  File "so.py", line 9, in <module>
    while s[end] <= s[end+1]:
IndexError: string index out of range

就是这样:end 是 8,因此 end+1 是 9。对于 9 个字符的字符串,索引仅运行 0-8。当您检查的子字符串按字母顺序排列时,您无法控制搜索是否超出了右端。

关于python - 如何在Python中打印给定字符串的最长字母子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47025834/

相关文章:

python - Google App Engine dev_appserver 找不到 PIL(我已经安装了)

python - 在python中将三个numpy数组合并为jpeg图像

java - 用于指定空字符串的正则表达式

javascript - 从 Javascript 中的字符串获取 URL 值

python - 从右手边切开

python - Splash/PhantomJS(用于 JavaScript 渲染)可以与 Wget 一起下载网页吗?

c++ - 当我想使用 Swig %extend 扩展给定类时 Swig 出现问题

java - 如何获取Date数据类型中不带时间戳的系统日期?

Javascript 正则表达式失败

c++ - 如果字符串在数组中,这样做吗?