对于给定的输入字符串input = "abbbbdeeefffddddb"
,我想将其解析为
result = ['a', 'b', 'bb', 'bd', 'd', 'e', 'ee', 'f', 'ff', 'dd', 'db']
此解析背后的逻辑如下。如果第一次遇到子字符串,则将其解析掉。在每个后续出现的子字符串中,它与以下字母连接,然后被解析掉。
为了显示:
- 我们以前见过“a”(位置 0)吗?没有解析它。
- 我们以前见过“b”(位置 1)吗?没有解析它。
- 我们以前见过“b”(位置 2)吗?是的; 与以下字母合并
- 我们以前见过“bb”(位置 2 和 3)吗?没有解析它。
- 我们以前见过“b”(位置 4)吗?YES 与以下字母合并
- 我们以前见过“bd”(位置 4 和 5)吗?不解析它...
这种情况一直持续到最后。
我尝试使用以下代码来实现这一点:
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)
这是结果:['a', 'b', 'bb', 'bb', 'bd', 'd', 'e', 'ee', 'ef', 'f', 'ff', 'fd', 'dd', 'dd', 'dd', 'db']
这是错误的。我在这里遗漏了一个关键部分,但我不知道如何实现它,也许它需要一些递归函数,或者我应该使用break
或continue
某处。
不要只为这个给定的输入提供解决方案。这里给出的输入只是为了举例。解决方案必须是通用的,以适用于不同的输入。
这是原始算法,第 6 页:论文