有没有办法找到不包含特定子字符串的数组的所有组合?
例如
a=['a','b','c'] aaa aab aac aba abb ... ccc
但是我不想要子字符串ab
所以aaa aac aca acb ... ccc
我使用下面的代码,但是对于20
字符和13
的组合,需要花费太多的时间
import itertools
lista=[]
def foo(l):
yield from itertools.product(*([l] * 3))
non=["ab"]
for x in foo('abc'):
x=(''.join(x))
for j in non:
if j in x:
value=1
break
else:
value=0
if (value==0):
lista.append(x)
与其生成所有字符串,然后拒绝包含任何禁止子字符串的字符串,不如(渐进地)通过回溯来构建字符串,并拒绝已经包含禁止子字符串的任何部分字符串。我们只需要测试当前部分字符串是否以任何禁止的子字符串结尾,这比测试是否包含一个子字符串要快
下面是一个使用递归生成器函数的实现:
例如:
对于大小为20的字母表中长度为13的字符串,这应该是一个很大的改进,但是2013是一个巨大的数字。因此,除非你禁止很多子字符串,否则解决方案的数量将非常大。任何算法都不可能在少于O(hk)的时间内生成长度为k的h字符串,因此任何有效算法的运行时间仍然是output-sensitive
相关问题 更多 >
编程相关推荐