检查是否可以通过链接列表中的元素来创建String

时间:2017-09-17 14:32:46

标签: python regex string list concatenation

我想检查是否可以通过链接给定列表中的元素来创建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')

2 个答案:

答案 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)

使用itertools.combinations ...

此功能应该完成这项工作:

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'])