我想检查是否可以通过链接给定列表中的元素来创建String,以及该串联是什么。 例如:
String = 'BIBER'
List = ['BI', 'BIB', 'BIBE', 'BE', 'BER', 'ER']
' BIBER'可以建立在BI' BI'和' BER',
所以程序应该返回TRUE和一个包含组件的列表:
components = ['BI','BER']
我已经尝试过了,但我无法检查组件是什么:
r = re.compile("(?:" + "|".join(List) + ")*$")
if r.match(Word) != None:
print('TRUE')
答案 0 :(得分:0)
你可以做暴力:
s = 'BIBER'
li = ['BI', 'BIB', 'BIBE', 'BE', 'BER', 'ER']
import itertools as it
for i in range(2,len(li)+1):
for t in it.permutations(li, i):
if ''.join(t)==s:
print t
打印:
('BI', 'BER')
('BIB', 'ER')
如果要测试某些子字符串组是否可以完全组合成一个字符串:
def builds(s, componts):
return any(s==''.join(t) for t in it.permutations(componts))
>>> builds(s, ('R','BE','I','B'))
True
这不能处理多次重复使用不同的子串(例如('B','I','E','R')
)为此,您可以考虑使用Trie。
答案 1 :(得分:0)
此功能应该完成这项工作:
def check(String, List):
return String in [a+b for a,b in itertools.combinations(List, 2)]
对于您输入的内容返回True
:
check('BIBER', ['BI', 'BIB', 'BIBE', 'BE', 'BER', 'ER'])