【发布时间】:2017-08-15 16:25:20
【问题描述】:
在挑战中,您被要求找出由相同字母组成的最长子串的长度。例如,“aaabbcaaaa”行包含四个具有相同字母“aaa”、“bb”、“c”和“aaaa”的子字符串。最后一个子字符串是最长的,这使它成为答案。输入:字符串。输出:诠释。示例:
long_repeat('sdsffffse') == 4
long_repeat('ddvvrwwwrggg') == 3
这是我的代码:
def long_repeat(text):
text = list(text)
counter = []
c = []
for i in range(len(text)):
if text[0] == text[1]:
c.append(text.pop(0))
else:
counter.append(c)
c = []
print text # should be empty
print counter # should contain a lists of the repeated letters
输出:
>>>long_repeat('aaabbccc')
['a', 'b', 'b', 'c', 'c', 'c', 'c']
[['a', 'a'], [], [], [], [], [], []]
在这种情况下,为什么循环在完成第一个字母“a”时停止?
【问题讨论】:
-
我很困惑这甚至是如何工作的。您应该会收到类似于
'str' object has no attribute 'pop'的错误。 -
我把文本变成了第二行的列表
-
你做到了,但
pop是在text上调用的,而不是在txt上调用的。 -
pop从列表中迭代它是一个非常糟糕的主意。 -
@belle:迭代使用索引;因此,您首先查看元素 0,然后查看元素 1,然后查看元素 2。从一开始弹出将所有内容向左移动一步;因此,索引 1 处的内容现在位于索引 0 处,但 迭代索引不会调整。因此,如果您只处理元素 1,则接下来查看索引 2,但那是 pop 之前索引 3 处的元素,索引 2 处的元素不再存在,而是位于索引 1..
标签: python python-2.7