Ограниченные перестановки строк в Python

Как я могу сделать следующее в Python?

Учитывая две строки. Распечатайте все переплетения двух строк. Перемежение означает, что если B приходит после A, оно также должно появиться после A в чередуемой строке. ex-AB и CD ABCD ACBD ACDB CABD CADB CDAB

2 Solutions collect form web for “Ограниченные перестановки строк в Python”

Это эффективно проблема с деревом (а именно, дерево решений о том, следует ли продвигать вдоль одной строки или другой). Зачастую самый простой способ приблизиться к проблеме с деревом – это рекурсивное решение.


Вот пример:

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 

Шляпы на @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 

Надеюсь это поможет

  • Создание перестановок списка с повторяющимися элементами
  • эффективные подсчеты и перестановки
  • Пожалуйста, объясните этот алгоритм, чтобы получить все перестановки строки
  • как создать перестановки массива в python?
  • Перестановки рекурсии Python
  • перестановки с фиксированным предыдущим элементом в Python
  • Более эффективный способ получить целые перестановки?
  • Python - лучший язык программирования в мире.