我正在做的事情的一点是编写一个程序,打印s
的最长子串,其中字母按字母顺序出现。
例如,如果s = 'azcbobobegghakl'
,那么您的程序应该打印:
按字母顺序排列的最长子字符串是:beggh
在tie的情况下,打印第一个子字符串。例如,如果s = 'abcbcd'
,那么您的程序应该打印:
按字母顺序排列的最长子字符串是:abc
我已经运行了测试,它适用于我输入的大多数字符串,但这个字符串存在问题。
在步骤15中,它应该比较2 > 0
,这是真的,但它没有执行,
有人能解释一下吗?我在哪里弄错了?
我的代码如下所示:
s = 'zodworqozid'
curstring = [0]
longest = [0]
for i in range(1,len(s)):
if s[i] >= str(curstring[-1]):
curstring+= s[i]
if len(curstring) > len(longest):
longest = curstring
else:
curstring = s[i]
print('Longest substring in alphabetical order is:', longest)
答案 0 :(得分:0)
错误1:
curstring = [0]
您希望使用curstring
中的第一个字符初始化s
(而不是包含整数0
的列表)。我知道您已经知道如何在代码中执行此操作。 (即s[0]
)这样您的后续代码就会正确地将下一个字符与s
中的第一个字符进行比较。
错误2:
longest = [0]
您希望将longest
初始化为空列表 str
(即""
)而不是包含整数的list
0
。这是因为您在longest
中不需要列表功能,因为您直接返回str
。
错误3:
longest = curstring
您希望复制此处没有错误。当curstring
而不是将longest
与curstring
相关联。使用list(curstring)
或curstring[:]
执行此操作。curstring
成为list
时,我误以为str
。
答案 1 :(得分:0)
下面:
curstring = [0]
longest = [0]
你正在创建两个列表,里面有一个元素,它是一个整数(0)。
稍后,在这里:
if s[i] >= str(curstring[-1]):
您正在检查给定字母的值是否高于列表中的最后一个元素。由于Python是zero-based,你可以从字母“o' (因为它有索引1,恰好是你的范围列表中的第一个)。
for i in range(1,len(s)):
Char(字母)比较基于ASCII table,因此给出的任何字母都会有更高的值"比0(' o'是111)。
因为第二段代码的条件为真,所以字母“' o'被添加到此块的列表中:
curstring+= s[i]
之后,列表 curstring 上面有两个元素:0和' o'。
if len(curstring) > len(longest):
在这里,你要比较 curstring (如上所述)和 longest 这是一个包含一个元素的列表:0(因为你创建了一个列表上面描述的第一个代码块中的元素。条件为真(2个元素不止一个元素),所以最长现在points与 curstring 在同一个列表中,因此有两个元素(和长度= 2)。
稍后,正如您在所提供的可视化工具中看到的那样, curstring 引用变量并不指向列表。执行此行时,它的类型会被更改:
curstring = s[i]
所以稍后,当添加一个字符时,当执行15.步骤时,结果是一个双字母字符串" dw"。该字符串与列表 longest 与两个元素(如上所述)进行比较。字符串" dw"长度为2,列表的长度为2,这就是条件为假的原因。
您应该阅读一些Python中的类型以及如何在代码中创建和维护变量 - 它可以帮助您捕获这些小错误。请记住,Python在列表方面的语法与C ++或Java语言不同 - 我假设您编写了该代码
curstring = [0]
longest = [0]
基于其他语言的数组/列表的实验。 Python中的空列表是这样创建的:
new_list = []
答案 2 :(得分:0)
我不确定你到底是什么意思"在第15步,它应该比较2> 0这是真的,但它没有执行,有人能解释一下吗?我在哪里弄错了?"。但是看看你的代码,
curstring = [0]
if s[i] >= str(curstring[-1]):
这两个语句意味着当i == 1时,条件s [i]> = str(curstring [-1])总是为真,这在s [1]时是不正确的
要纠正它。将curstring的初始值设置为s [0]," curstring = s [0]"将工作。还有一个建议。我想"如果s [i]> = s [i-1]"更具可读性。
希望这会有所帮助。