擅长:python、mysql、java
<p>可以使用递归生成器函数:</p>
<pre><code>def get_combos(d, s, i = 0, c = []):
if (r:=''.join(b for _, b in c)) == s:
yield c
elif d:
if s.startswith(r+d[0]):
yield from get_combos(d[1:], s, i = i+1, c=c+[(i, d[0])])
yield from get_combos(d[1:], s, i = i+1, c=c)
print(list(get_combos('cattcat', 'cat')))
</code></pre>
<p>输出:</p>
<pre><code>[[(0, 'c'), (1, 'a'), (2, 't')],
[(0, 'c'), (1, 'a'), (3, 't')],
[(0, 'c'), (1, 'a'), (6, 't')],
[(0, 'c'), (5, 'a'), (6, 't')],
[(4, 'c'), (5, 'a'), (6, 't')]]
</code></pre>
<p>出于演示的目的,原始源字符串中每个字符的索引都包含在输出中</p>