用一组字符替换字符串中的'#',给出所有可能的字符串组合

Replace '#' in a string with a set of characters, give all possible string combinations

问题:
用一组字符替换字符串 S 中的“#”。替换后生成所有可能的字符串组合。

示例 1:
字符串 = "a#b"
字符集 = {1,2,3}
可能的字符串是“a1b”、“a2b”、“a3b”

示例 2:
字符串 = "##b"
字符集 = {1,2}
可能的字符串是“11b”、“22b”、“12b”、“21b”

我的工作:
用单个'#'很明显,我也能做到,但是当字符串像“a#bcd#ef#”时,我就不知道了继续。

谁能提供算法和工作代码(可能在python)

您可以使用 itertools.product 生成可能的字符串组合,然后使用迭代器(和 next)技巧将 # 替换为字符。

import itertools

def fill_pounds(s, chars):
    for p in map(iter, itertools.product(chars, repeat=s.count('#'))):
        yield ''.join(c if c != '#' else next(p) for c in s)

print(*fill_pounds('a#b', '123'))
print(*fill_pounds('##b', '12'))
print(*fill_pounds('f##k', 'or'))

输出:

a1b a2b a3b
11b 12b 21b 22b
fook fork frok frrk