我有一个单词列表,它是字符串的子集
例如,如果字符串是'abb'
列表将是
[ '一个', 'AB', 'B']
我想创建一个列出原始字符串的列表。因此,列表列表中的一个列表字母数必须与字符串
中的字母数完全相等所以对于给定的例子,一个是 ['b','ab']
有一个帮助函数可以跟踪每个字符串中的字母,因此字母可以被视为数字,可以直接添加,如'b'+'ab'=='abb' 将被视为 True
我是递归的新手,我想不出创建这个功能的方法,请帮忙。
完整示例:
string = 'office key'
lst_of_possibilities = ['icky', 'fee', 'coy', 'key', 'ice', 'office', 'fief', 'icy', 'iffy', 'eye', 'foe', 'eke', 'yoke', 'coffee', 'coke', 'off', 'foci', 'fife']
并在函数结束后输出为:
[['eke', 'icy', 'off'], ['eke', 'off', 'icy'], ['ice', 'key', 'off'], ['ice', 'off', 'key'], ['icy', 'eke', 'off'], ['icy', 'off', 'eke'], ['key', 'ice', 'off'], ['key', 'off', 'ice'], ['key', 'office'], ['off', 'eke', 'icy'], ['off', 'ice', 'key'], ['off', 'icy', 'eke'], ['off', 'key', 'ice'], ['office', 'key']]
所以我想说的是,上面列表中的每个列表都会加上“office key”这个词
答案 0 :(得分:0)
最愚蠢的方法可能是: 让字符串为 s ,单词列表为 p
s = "office key"
p = ['icky', 'fee', 'coy', 'key', 'ice', 'office', 'fief', 'icy', 'iffy', 'eye', 'foe', 'eke', 'yoke', 'coffee', 'coke', 'off', 'foci', 'fife']
res_list = []
s = "".join(s.split())
n = len(p)
for mask in range(2**n):
str = ""
cur_list = []
for i in range(n):
if mask & (2**i) > 0:
str += p[i]
cur_list.append(p[i])
if len(str) > len(s):
break
bad = 0
for ch in p[i]:
if ch not in s:
bad = 1
break
if bad == 1:
break
ok = 1
for ch in s:
if ch == " ":
continue
pos = str.find(ch)
if pos == -1:
ok = 0
break
else:
str = str[:pos] + str[(pos+1):]
if len(str) > 0:
ok = 0
if ok == 1:
res_list.append(cur_list)
print res_list
这是一个稍微优化的强力搜索,我认为对您来说特定的问题是正确的,因为您需要所有可能的解决方案列表。
P.S。您可以获得每个特定输出的所有排列,只需在最后输出res_list中每个列表的所有排列,就可以更快地实现这些排列