Python中字符串的限制排列

时间:2012-10-26 22:58:15

标签: python permutation

如何在Python中执行以下操作?

给出两个字符串。打印两个字符串的所有交错。 交错意味着if B在A之后,它也应该在交错字符串中的A之后。 EX- AB和CD A B C D ACBD ACDB CABD CADB CDAB

2 个答案:

答案 0 :(得分:8)

这实际上是一个树行走问题(即,是否沿着一个字符串或另一个字符串前进的决策树)。通常,处理树行走问题的最简单方法是递归解决方案。


以下是一个例子:

def ordered_permutations(str1, str2):
    perms = []
    if len(str1) + len(str2) == 1:
        return [str1 or str2]
    if str1:
        for item in ordered_permutations(str1[1:], str2):
            perms.append(str1[0] + item)
    if str2:
        for item in ordered_permutations(str1, str2[1:]):
            perms.append(str2[0] + item)
    return perms

答案 1 :(得分:1)

向@Amber致敬,感谢他们认识到这个问题并给出了一个非常优雅的解决方案。

这是我的两分钱(只是打印出答案):

def interleave(L1, L2, answer=None):
    if answer is None:
        answer = ''
    if not L1 and not L2:
        print answer
    else:
        if L1:
            a = answer + L1[0]
            interleave(L1[1:], L2, a)
        if L2:
            ans = answer + L2[0]
            interleave(L1, L2[1:], and)

>>> interleave('ab', 'cd')
abcd
acbd
acdb
cabd
cadb
cdab

希望这有帮助