问题是要打印两个给定字符串的所有可能的交错。所以我写在Python它运行一个像这样的工作代码:如何交错或创建两个字符串的独特排列(无递归)
def inter(arr1,arr2,p1,p2,arr):
thisarr = copy(arr)
if p1 == len(arr1) and p2 == len(arr2):
printarr(thisarr)
elif p1 == len(arr1):
thisarr.extend(arr2[p2:])
printarr(thisarr)
elif p2 == len(arr2):
thisarr.extend(arr1[p1:])
printarr(thisarr)
else:
thisarr.append(arr1[p1])
inter(arr1,arr2,p1+1,p2,thisarr)
del thisarr[-1]
thisarr.append(arr2[p2])
inter(arr1,arr2,p1,p2+1,thisarr)
return
它是在字符串中的每一个点,那么对于一个递归调用,它认为当前元素为属于第一阵列,并在下一个电话,属于另一个阵列。因此,如果输入的字符串是ab
和cd
,它打印出abcd
,acbd
,cdab
,cabd
等p1
和p2
是指向数组(因为Python中的字符串是不可改变的,我使用数组!)。任何人都可以告诉我,这段代码的复杂性是什么,如果可以改进或者不改善?我已经写了类似的代码从给定的阵列打印长度k
的所有组合:
def kcomb(arr,i,thisarr,k):
thisarr = copy(thisarr)
j,n = len(thisarr),len(arr)
if n-i<k-j or j >k:
return
if j==k:
printarr(thisarr)
return
if i == n:
return
thisarr.append(arr[i])
kcomb(arr,i+1,thisarr,k)
del thisarr[-1]
kcomb(arr,i+1,thisarr,k)
return
这也适用同样的原则。所以一般来说,如何找到这些功能的复杂性,以及如何优化它们? DP可以做到这些吗?第一个问题的示例输入输出:
>>> arr1 = ['a','b','c']
>>> arr2 = ['d','e','f']
>>> inter(arr1,arr2,0,0,[])
abcdef
abdcef
abdecf
abdefc
adbcef
adbecf
adbefc
adebcf
adebfc
adefbc
dabcef
dabecf
dabefc
daebcf
daebfc
daefbc
deabcf
deabfc
deafbc
defabc
请问您可以发布“printarr”的代码 –
是的,我可以,但这很简单,它只需将数组作为输入,将所有元素连接成一个字符串并将其打印出来! – SexyBeast
很难理解你在做什么。你能发布输入和期望的输出吗? – monkut