Python 成为最后一个b,导致bbb添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用set()将删除重复项,但仍然fd和
Python 成为最后一个b,导致bbb添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用set()将删除重复项,但仍然fd和,python,string,parsing,python-2.7,string-parsing,Python,String,Parsing,Python 2.7,String Parsing,成为最后一个b,导致bbb添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用set()将删除重复项,但仍然fd和ef不应该出现在结果中。是的,顺序并不重要。使用set()将删除重复项,但仍然fd和ef不应出现在结果中。是的,订单不重要,顺便说一句,订单不是问题。您的解决方案给出了此输入的预期结果,但是如果输入发生更改,它将不起作用。您的解决方案总是以双字
成为最后一个
b
,导致bbb
添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用set()
将删除重复项,但仍然fd
和ef
不应该出现在结果中。是的,顺序并不重要。使用set()
将删除重复项,但仍然fd
和ef
不应出现在结果中。是的,订单不重要,顺便说一句,订单不是问题。您的解决方案给出了此输入的预期结果,但是如果输入发生更改,它将不起作用。您的解决方案总是以双字符的形式解析字符串。我试图完成的解析是基于以下文章中给出的LZ解析算法:第6页提供了所需的信息顺序不是问题。您的解决方案给出了此输入的预期结果,但是如果输入发生更改,它将不起作用。您的解决方案总是以双字符的形式解析字符串。我试图完成的解析是基于以下论文中给出的LZ解析算法:第6页提供了所需的信息
input = "abbbbdeeefffddddb"
comparator = []
def parse(string):
for pointer in range(len(string)-1):
if string[pointer] not in comparator:
comparator.append(string[pointer])
else:
substring = string[pointer] + string[pointer+1]
comparator.append(substring)
print comparator
parse(input)
def parse(string):
pointer = 0
while pointer < len(string):
if string[pointer] not in comparator:
comparator.append(string[pointer])
else:
substring = string[pointer] + string[pointer+1]
comparator.append(substring)
pointer += 1
pointer += 1
print comparator
['a', 'b', 'bb', 'bd', 'e', 'ee', 'f', 'ff', 'd', 'dd', 'db']
def parse(string):
result = set()
letters = iter(string)
for letter in letters:
if letter not in result:
result.add(letter)
else:
substring = letter + letters.next()
result.add(substring)
return list(result)
# same set, different order
['a', 'bd', 'b', 'e', 'd', 'bb', 'f', 'ee', 'dd', 'db', 'ff']
$ cat single-seen-double
#!/usr/bin/python3
def single_seen_double(string):
length = len(string)
index = 0
seen = set()
while index < length:
if string[index] in seen and index < length - 1:
yield string[index:index+2]
index += 2
else:
seen.add(string[index])
yield string[index]
index += 1
def main():
print(list(single_seen_double("abbbbdeeefffddddb")))
main()
zareason-dstromberg:~/src/outside-questions/single-seen-double x86_64-pc-linux-gnu 5871 - above cmd done 2013 Tue Nov 05 01:48 PM
$ ./single-seen-double
['a', 'b', 'bb', 'bd', 'e', 'ee', 'f', 'ff', 'd', 'dd', 'db']