问题:
设P是将字符串s划分为相邻且可能为空的子串的所有可能方式的集合。我正在寻找一种优雅的算法来解决这个问题。
背景背景:
给定字符串元组(s,w),如上所述定义P(s)和P(w)。存在一个特定的分区R∈P(s)和T∈P(w),它产生最少数量的子串Levenshtein(插入,删除和替换)编辑。
一个例子:
将字符串“foo”分区为5个子字符串,其中ε是空子字符串:
[ε, ε, f, o, o]
[ε, f, ε, o, o]
[ε, f, o, ε, o]
[ε, f, o, o, ε]
[f, ε, ε, o, o]
[f, ε, o, ε, o]
[f, ε, o, o, ε]
[f, o, ε, ε, o]
[f, o, ε, o, ε]
[f, o, o, ε, ε]
答案 0 :(得分:1)
简单的递归方法怎么样?
def part(s, n, pre):
if s == '':
return [pre + '.' * n]
elif n > 0:
res = []
if n > len(s):
res += part(s, n-1, pre + '.')
if len(s) > 0:
res += part(s[1:], n-1, pre + s[0])
return res
结果:
>>> print part('foo', 5, '')
['foo..', 'fo.o.', 'fo..o', 'f.oo.', 'f.o.o', 'f..oo', '.foo.', '.fo.o', '.f.oo', '..foo']