将字符串分区为包含空分区的子字符串的算法

时间:2012-09-17 11:03:27

标签: string algorithm partitioning

问题:
设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, ε, ε]

1 个答案:

答案 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']